3

我试图mktime();使用我的默认时区 *(America/Sao_Paulo)* 制作自己的 php。它工作正常,但我注意到某些时间戳比应有的时间多一小时。所以我追踪并找出脚本开始错过的日期:03/11月/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:对不起英文错误。

4

2 回答 2

4

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

因此,由于该特定日期的时间变化,这两天的午夜之间的差异只有 23 小时。

于 2011-06-25T20:15:21.500 回答
3

听起来像是一个日光节约时间问题。可能只有 23 小时,因为 DST 将时钟提前,跳过 1 小时。

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

于 2011-06-25T20:10:27.993 回答