1

2つのタイムスタンプの差を計算してから、読み取り可能な人間の日付に変換し直したいのですが、日付に2時間が追加されています。どうしてか分かりません。

$data = $row['date_future']; // 1363473942
$time = time(); // 1363472242

//echoing future date
echo "Future time: ".date('H:i:s', $data)."<br/>";
echo "Current time:".date('H:i:s', $time)."<br/>";

出力:

将来の時間:00:45:42

現在の時刻:00:17:22

大丈夫ですが、差を計算しようとすると、さらに2時間かかります。

echo "Difference: ".date('H:i:s', $data-$time);

出力:

違い:02:28:20

修理:

$d1 = new DateTime(date('H:i:s', $data));
$d2 = new DateTime(date('H:i:s', $time));
$interval = date_diff($d2, $d1);

echo "Difference: ".($interval->format('%H:%i:%s'))

出力:

違い:00:28:20

4

2 に答える 2

3

タイムスタンプはUNIXタイムスタンプであり、1970年1月1日のUTC午前0時から経過した時間(秒単位)を表します。

2つのタイムスタンプの差は1700秒であるため、1970年1月1日の午前0時UTCから1700秒後の日付(1970年1月1日0:28 UTC)を表します。UTCより2時間進んでいる必要があるため、1月1日2:28と表示されます。

于 2013-03-16T22:31:58.337 に答える
3

これは実際にはタイムゾーンの問題ではありません(少なくともPHP構成で正しいタイムゾーンパラメーターを設定することの1つではありません)–これは欠陥のあるロジックの問題です。

Unixタイムスタンプは、1.1.1970、00:00:00UTCから秒単位で指定されます。

1363473942-1363472242は1700です–そして、その日付のH:i:sの部分だけでなく、それが明らかになるはずです。

echo "Difference: ".date('r', $data-$time); // replaced format H:i:s with r

この出力

違い:1970年1月1日木曜日01:28:20 +0100

–したがって、ここでは完全に異なる日付を確認しています。タイムゾーンオフセットとDSTのオン/オフは、一見論理的ではないように見えるかもしれない時間差のさまざまな時点で予想されます。

別のタイムスタンプからUNIXタイムスタンプを差し引くと、数秒になりますが、元のタイムスタンプとは関係のないUNIXタイムスタンプではありませ

したがって、意味のあるUNIXタイムスタンプであると想定してこの違いをフォーマットすると、失敗することになります。

たとえば、DateTime :: diffを使用することは、これを処理するための賢明なアプローチです。

于 2013-03-16T22:36:42.960 に答える