3

mktime();デフォルトのタイムゾーン *(America/Sao_Paulo)* を使用して独自の php を作成しようとしていました。正常に動作していましたが、一部のタイムスタンプが本来より 1 時間長いことに気付きました。1985 年 11 月 3 日、私はいくつかのテストを実行しましたが、奇妙な理由 (これが私が理解しようとしている理由です) のために、この日は 23 時間しかありません! それを確認してください:

<?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; 

?>

タイムゾーン UTC では発生しないことに注意してください。それはバグの可能性ですか?

PS: 英語の間違いで申し訳ありません。

4

2 に答える 2

4

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

したがって、その特定の日付の時間変更により、2 日間の午前 0 時の差はわずか 23 時間です。

于 2011-06-25T20:15:21.500 に答える
3

サマータイムの問題のようですね。DST が時計を進め、1 時間をスキップするため、おそらく 23 時間しかありません。

と呼ばれるmktimeへの追加の引数がありますis_dst。0 または 1 に設定してみて、問題が解決するかどうかを確認してください。

于 2011-06-25T20:10:27.993 に答える