2012-01-07 13 views
2

私はこのスクリプトを実行しました:異なるタイムゾーンのタイムスタンプは同じですか?

echo date_default_timezone_get()."\n"; 
echo "----\n"; 

date_default_timezone_set('Asia/Kabul'); 
echo date_default_timezone_get()."\n"; 
echo "----\n"; 

echo time()."\n"; 
$dt = new DateTime; 
echo $dt->format('U') . "\n"; 
echo "----\n"; 

date_default_timezone_set('UTC'); 
echo date_default_timezone_get()."\n"; 
echo "----\n"; 

echo time()."\n"; 
$dt = new DateTime; 
echo $dt->format('U') . "\n"; 

と、すべての4つのタイムスタンプ値のために、それは言う:1325905766

新しいDateTimeは、タイムゾーンの設定に関係なく、常にタイムゾーンとしてUTCを設定するので、私はそれを取得しますが、time()についてはどうですか?

数秒前に、別のサーバー(おそらくヨーロッパ(ideone.com)にはない)で、それは4回返します:1325905723

これは同じです! (明らかに数秒差がありますが、同じタイムゾーンです)

time()常にUTCを返しますか?どうしたの??

+0

私はまもなく同じような問題に遭遇しました。私は(プロファイルの設定を介して)ユーザごとにタイムゾーンを設定しようとしていましたが、 'date()'関数で変更されるのは最後のタイムゾーン識別子でした。それは実際に時間*自体を変えていませんでした。 – animuson

+0

[PHP時間()はGMT/UTCタイムスタンプを返しますか?](http://stackoverflow.com/questions/4812170/does-php-time-return-a-gmt-utc-timestamp) – deceze

答えて

6

はい、両方ともUTCを使用します。具体的には、time()Uの両方の形式は、1970年1月1日の深夜UTC(「Unix epoch」)から経過した非閏秒数を返します。エポックはユーザーのタイムゾーンとは無関係の固定小数点であり、以来の秒数はすべてのタイムゾーンで同じであるため、time()はタイムゾーンの設定に関係なく同じ値を返します。

+0

非閏秒? – Rudie

+3

@Rudie:2番目の閏年(http://en.wikipedia.org/wiki/Leap_second)ではありません。 – jwodder

+0

ええと...だから、UTCは実際に34秒遅れています!奇妙な。何も作られていないこれらの謎の秒については知らなかった。 – Rudie

6

time()は、1970年1月1日00:00:00 GMTからの秒数を返します。

あなたがアジア/カブールまたはヒザ/ヨンにいるかどうかにかかわらず、特定の時点からの経過秒数は同じです。

関連する問題