UNIXタイムスタンプがランダムにある場合、それを今日の深夜またはユーザーが選択した深夜に切り捨てるにはどうすればよいですか。これは、特定の日の深夜0時以降に時間と分を追加したいためです。
たとえば、タイムスタンプが1324189035
の場合、時間、分、秒を削除して、その日の深夜にタイムスタンプを配置するにはどうすればよいですか。
echo date('d-m-Y H:i:s', strtotime('today', 1324189035));
使用方法が原因で、真夜中を計算することはまったくありません。タイムスタンプに追加するものを24時間制に変換してから、strtotimeを使用する方がはるかに簡単です。
echo strtotime("0:00",1324189035); // 1324184400
echo strtotime("17:50",1324189035); // 1324248600
そして、それを人間が読める形式にしたい場合は、date
とm/d/Y H:i:s
を使用してください。
echo date('m/d/Y H:i:s', strtotime('17:50',1324189035)); // 12/18/2011 17:50:00
単に使用する
strtotime('today midnight');
ただやる
date('d-m-Y',strtotime('today'));
簡単!
簡単な解決策は、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