php时间戳为什么会这样?1985年11月3日


Why php timestamp behave like this? 03/November/1985

我试图使用我的默认时区*(美国/圣保罗)*制作我自己的php mktime();。它运行正常,但我注意到有些时间戳比应该的多了一个小时。所以我找到了剧本开始错过的日期: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时区一起出现。这可能是个bug?

附言:很抱歉英语有错误。

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

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

听起来像是一个节省时间的问题。可能只有23个小时,因为夏令时会提前一个小时。

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