2011-10-27

date()関数は賢い

UNIXタイムスタンプについて調べていたとき、
PHPで、


date_default_timezone_set('Europe/London');
echo date('Y-m-d H:i:s', 0);


ってやったら、


1970-01-01 01:00:00


って出た。


ん?日本と9時間違うはずなのに...


で調べてみたら、Wikipedia に書いてあった。


Wikipedia 英国夏時間


1968年2月18日1時(UTC)から1971年10月31日2時(UTC)までの期間、グリニッジ標準時よりも1時間早い英国標準時(BST: British Standard Time, UTC+1)を標準時とし、通年でこれを用い、夏時間が実施されなかった。



もろ、1時間進んでたときだったのね。


で、次のコードで確認してみたら、思った通りにちゃんと出た。


//  タイムゾーンを Europe/London にする
date_default_timezone_set('Europe/London');
echo date('Y-m-d H:i:s I e P T', 0);

//  タイムゾーンを Asia/Tokyo にする
date_default_timezone_set('Asia/Tokyo');
echo date('Y-m-d H:i:s I e P T', 0);

//  タイムゾーンを Europe/London にする
date_default_timezone_set('Europe/London');
//  1971/10/31 02:00:00
$intTime = mktime(2,0,0,10,31,1971);
echo date('Y-m-d H:i:s I e P T', $intTime);

//  タイムゾーンを Asia/Tokyo にする
date_default_timezone_set('Asia/Tokyo');
echo date('Y-m-d H:i:s I e P T', $intTime);

結果はこれ

1970-01-01 01:00:00 0 Europe/London +01:00 BST
1970-01-01 09:00:00 0 Asia/Tokyo +09:00 JST
1971-10-31 02:00:00 0 Europe/London +00:00 GMT
1971-10-31 11:00:00 0 Asia/Tokyo +09:00 JST



サマータイムじゃないから、フラグも立ってない。

0 件のコメント:

コメントを投稿

綺麗に見せることに全振りした操法大会の訓練を50日間するよりも、月1回でいいから基本的な操作方法の訓練を実施すべきだと思うのは俺だけか

 7月に県の消防操法大会がある。 市内分団の持ち回り制で、今年はうちの分団が出場する。 俺も前回回ってきたときに、選手として出た。 訓練が5月から始まっている。 週5日。 訓練時間は2時間だけど、その前に準備する時間もあり、訓練後の撤収時間も必要だから、拘束時間は約3時間。 俺が...