1

私は、PHP の DateTime クラスでかなり長い間苦労してきました。私の理解では、タイムゾーンに関係なく、UNIX タイムスタンプは常に UTC です。

そのため、このコード サンプルはかなり混乱しています。

$date1 = new DateTime("@1351382400"); // Sun Oct 28 2012 02:00:00 GMT+2 (DST)
var_dump($date1->getTimestamp()); //prints: 1351382400
$date1->setTimezone(new DateTimeZone("Europe/Stockholm"););
var_dump($date1->getTimestamp()); //prints: 1351386000

ご覧のとおり、setTimezone() は getTimestamp() の結果を変更します。

setTimezone() が getTimestamp() に影響すると予想されますか?

4

2 に答える 2

1

オフの量は 3600 秒、つまり 1 時間です。

これは、選択した日付がストックホルムの夏時間の終了日であるためだと思います。別の日付を使用すると、その効果は得られません。

$now = time();
echo "            now: $now\n";

$date1 = new DateTime("@{$now}");
echo "     date1 here: {$date1->getTimestamp()}\n";
$date1->setTimezone(new DateTimeZone("Europe/Stockholm"));
echo "date1 Stockholm: {$date1->getTimestamp()}\n";

出力:

            now: 1352321491
     date1 here: 1352321491
date1 Stockholm: 1352321491

これがバグかどうかはわかりませんが、DST が変更される日付を選択しないと発生しません。

于 2012-11-07T20:55:17.013 に答える
0

はい、UNIXタイムスタンプは、日付オブジェクトによる現在の時刻、またはエポックからの現在のマシン時刻です。

于 2012-11-07T20:13:11.143 に答える