2011-01-22 10 views
3
date_default_timezone_set("Asia/Singapore"); // UTC +8 
$dt = new DateTime(); 
$dt->setTimestamp(DateTime::createFromFormat('u', gmdate('u'))->getTimestamp()); 
echo $dt->getTimezone()->getName(); // Asia/Singapore 
echo $dt->format('d M Y H:i:s'); // Correct local time 

$dt->setTimezone(new DateTimeZone('UTC')); 
echo $dt->format('d M Y H:i:s'); // Correct UTC Time 
die; 

タイムスタンプにタイムゾーンデータが含まれているのだろうかと思います。 3行目ではgmdate()を使用していますが、これはUTC/GMT時間を私に与えるはずです。しかし、私がタイムゾーン&をdatetimeでフォーマットすると、それらはローカルタイムになります。私はDateTimeオブジェクトにタイムゾーンを設定しておらず、UTCタイムスタンプを与えました。それは何とかローカルタイムに変換することを知っていた。タイムゾーンのデータがタイムスタンプに含まれているかどうかは疑問です。PHP:タイムゾーンデータはタイムスタンプに埋め込まれていますか?

答えて

3

setTimestampGMT 0でタイムスタンプを受け入れ、gmdate('u')のためにGMTに渡しました。 DateTimeオブジェクトはデフォルトで現在のタイムゾーンをとります。

その後、タイムスタンプと現在のタイムゾーンを正しく設定しているため、DateTimeオブジェクトがシンガポールの日付をフォーマットします。タイムゾーンデータがタイムスタンプ

番のタイムスタンプを格納し、UNIXエポックからの秒だけの量で含まれている場合、私は思ってしまう

1

タイムスタンプはインタープリターのタイムゾーンに従って解釈されます。

いいえ、標準であり、タイムゾーンデータは含まれていません。

あなたの例では、タイムゾーンを変更するとその結果が証明されます。

タイムゾーンデータが埋め込まれている場合、結果は変更されません。

関連する問題