2

ちょっとトリッキーな質問があります.Stackoverflowで関連するすべての質問をすでに検索しましたが、どちらも私の難問を解決しませんでしたが、私は輪になって走っていると思いますので、ここに質問があります:

私はこのコードを持っています:

$val = (strtotime('2010-03-22 10:05:00')-strtotime('2010-03-22 09:00:00'))

これは正しく $val = 3900 (3600 秒 = 1 時間、300 秒 = 5 分) を返します。

しかし、これを行う:

echo date("H:i",$val)."<br>";

02:05に戻ります

これをしても:

echo date("H:i",3900)."<br>";

02:05 を返します (念のため)

これを行う:

echo date("H:i eTO",3900)."<br>";

戻り値

02:05 System/LocaltimeCET+0100

私のタイムゾーンは CET で、+1 です。

どうしたの?date() は何らかの理由でタイムゾーンを修正していますか? それとも私は何か間違ったことをしていますか?

4

4 に答える 4

2

これは、date(, ) を使用するとエポック (00:00:00 1970 年 1 月 01 日 UTC) + タイムスタンプの秒数が返されるために発生します。自分のタイムゾーンにローカライズされるため、タイムスタンプ 0 を指定すると、1970 年 1 月 1 日 UTC+1 の 01:00:00 が返されます。

于 2010-03-22T15:18:11.410 に答える
2

はい、タイムゾーンを修正しています。あなたがするとき

$val = (strtotime('2010-03-22 10:05:00')-strtotime('2010-03-22 09:00:00'))

に格納されているの$valは、UTC 1970 年 1 月 1 日 01:05 のタイムスタンプです。Unix Time に関するウィキペディアの記事を参照してください。

2 つのタイムスタンプの違いを扱っている場合は、DateTime::diff (PHP 5.3 が必要) を使用することをお勧めします。

于 2010-03-22T15:18:33.670 に答える
0

これは私がしました:

date_default_timezone_set('Europe/Helsinki');

これは GMT+02:00 です

結果は次のとおりです。

03:05 Europe/HelsinkiEET+0200

したがって、実際にはタイムゾーンを修正しています。説明は非常に単純であることがわかりました(ひらめきがありました):date()は「1970年1月1日GMT」から秒をカウントするため、実際には私のタイムゾーンと例では3900が正しく「02:その日から05" ...

自己学習+1 -_-'

于 2010-03-22T15:18:12.440 に答える
0

date は現地時間で機能し、GMT +1 を使用しているため、これは実際には正しい動作です。1970 年 1 月 1 日 1:05 のタイムスタンプ (3900) を指定すると、タイムゾーンに合わせて 1 と表示されます。

これが意図された用途である場合は、マシンの GMT オフセットを差し引くだけで正しい値を取得できます。

于 2010-03-22T15:18:42.870 に答える