2011-06-25 7 views
2

自分のPHPを自分のデフォルトのタイムゾーン*(America/Sao_Paulo)*を使ってmktime();にしようとしていました。 それはうまくいきましたが、いくつかのタイムスタンプには1時間以上かかることがあります。 スクリプトが見逃されるこの日を追跡して見つけました:03/November/1985 私はいくつかのテストを実行しました。それは私が理解しようとしている奇妙な理由で、今日はわずか23時間です! それを確認してください:それはタイムゾーンUTCで発生しませんPHPのタイムスタンプがこのように動作するのはなぜですか? 03/November/1985

<?php 

date_default_timezone_set('America/Sao_Paulo'); 

//shows 23 
echo (mktime(0,0,0,11,03,1985)- mktime(0,0,0,11,02,1985))/3600; 

//any other date, shows 24 
echo '<br/>'.(mktime(0,0,0,11,3,2000)-mktime(0,0,0,11,2,2000))/3600; 

?> 

ていることに注意してください。 これはバグの可能性がありますか?

PS:英語の間違いをおかけして申し訳ありません。

答えて

3

1985年にブラジルで夏時間の始まりを表す日付を選択しました。http://tldp.org/HOWTO/TimePrecision-HOWTO/tz.htmlを参照してください。

したがって、その特定の日付の時間変更のため、2日間の深夜の差はわずか23時間です。

+0

ありがとう!私はリンクを楽しんだ。 – Ravan

3

1日のような低音時間の問題です。おそらくDSTは1時間をスキップして時計を先に押すため、23時間しかありません。

mktimeには、is_dstという別の引数があります。それを0または1に設定して、問題が解決したかどうかを確認してください。ただし、出力が正しくなっている可能性があります。

+0

ありがとうございます。 – Ravan

+0

注意is_dstパラメータはPHP 7で削除されました。 – felipsmartins

関連する問題