为什么php时间戳表现得像这样? 03月/ 11月/ 1985年

时间:2011-06-25 20:07:58

标签: php timezone unix-timestamp mktime

我正在尝试使用我的默认时区*(America / Sao_Paulo)*制作我自己的php mktime();。 它工作正常,但我注意到有些时间戳比它应该多一个小时。 所以我找到了这个脚本开始错过的日期:03 / November / 1985 我进行了一些测试并出于一些奇怪的原因(这就是我想要了解的),这一天只有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:对不起英文错误。

2 个答案:

答案 0 :(得分:3)

听起来像是一天的节约时间问题。可能只有23个小时,因为DST推动时钟前进,跳过1小时。

mktime有一个名为is_dst的额外参数。尝试将其设置为0或1并查看是否可以解决您的问题,尽管您获得的输出可能非常正确。

答案 1 :(得分:3)

您恰好选择了代表1985年巴西夏令时开始的日期。请参阅http://tldp.org/HOWTO/TimePrecision-HOWTO/tz.html

所以,由于特定日期的时间变化,两天午夜之间的差异只有23个小时。