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:タイムゾーンデータはタイムスタンプに埋め込まれていますか?