web-dev-qa-db-ja.com

UNIXタイムスタンプは深夜に丸められます

UNIXタイムスタンプがランダムにある場合、それを今日の深夜またはユーザーが選択した深夜に切り捨てるにはどうすればよいですか。これは、特定の日の深夜0時以降に時間と分を追加したいためです。

たとえば、タイムスタンプが1324189035の場合、時間、分、秒を削除して、その日の深夜にタイムスタンプを配置するにはどうすればよいですか。

23
user962449
echo date('d-m-Y H:i:s', strtotime('today', 1324189035));
20
zerkms

使用方法が原因で、真夜中を計算することはまったくありません。タイムスタンプに追加するものを24時間制に変換してから、strtotimeを使用する方がはるかに簡単です。

echo strtotime("0:00",1324189035); // 1324184400
echo strtotime("17:50",1324189035); // 1324248600

そして、それを人間が読める形式にしたい場合は、datem/d/Y H:i:sを使用してください。

echo date('m/d/Y H:i:s', strtotime('17:50',1324189035)); // 12/18/2011 17:50:00
17
cwallenpoole

単に使用する

strtotime('today midnight');
6
M_R_K

ただやる

date('d-m-Y',strtotime('today'));

簡単!

1
Mark Zuckerberg

簡単な解決策は、modulo式を使用して、1日のタイムスタンプから超過した秒数を削除することです。

<?php

date_default_timezone_set('UTC');

$timestamp = time();

echo "timestamp : " . $timestamp . PHP_EOL;
echo "timestamp formatted : " . date('Y-m-d H:i:s', $timestamp) . PHP_EOL;

$diff = $timestamp % (60 * 60 * 24);

echo "diff : " . $diff . PHP_EOL;

$midnight = $timestamp - $diff;

echo "midnight : " . $midnight . PHP_EOL;
echo "midnight formatted : " . date('Y-m-d H:i:s', $midnight) . PHP_EOL;

これにより、次の結果が出力されます。

タイムスタンプ:1575451074

フォーマットされたタイムスタンプ:2019-12-04 09:17:54

真夜中の差分:1575417600

真夜中のフォーマット:2019-12-04 00:00:00

そして、これが任意のタイムスタンプから深夜を取得するための1つのライナー関数です。

function getMidnight ($timestamp) { return $timestamp - ($timestamp % 86400); }

http://sandbox.onlinephpfunctions.com/code/1d85c935e71fcf011284ae33658e0c68dd8d8c28

0
Tim