Php strotime()无法处理02/29?

Php strotime()无法处理02/29?,php,date,strtotime,Php,Date,Strtotime,我计算两个日期之间的天数,如下所示: $start = strtotime($_SESSION['sdate']); $end = strtotime($_SESSION['hdate']); echo ($end - $start); $duration = ($end - $start) / 3600 /24;

我计算两个日期之间的天数,如下所示:

                    $start = strtotime($_SESSION['sdate']); 
                    $end = strtotime($_SESSION['hdate']); 
                    echo ($end - $start); 
                    $duration = ($end - $start) / 3600 /24; 
                    $duration+=1; //plus one day 
                    echo " The ad will show for ".$duration." day(s)<br/>"; 
$start=strotime($_SESSION['sdate']);
$end=strottime($_SESSION['hdate']);
echo($end-$start);
$duration=($end-$start)/3600/24;
$duration+=1//再加一天
echo“广告将显示“$duration.”天
”;
这通常很好,但当我有一个 开始日期为2012-02-29,开始日期为2012-04-01。我有一个持续时间 共:32.9583333 为什么会这样?那把我的计算搞砸了。有更好的办法吗 这样做? 谢谢
Ron

我认为这是因为DST时间发生了变化,发生在3月的最后一个星期日。

您的服务器时区没有更新。这就是它造成问题的原因

这并不是说你不能把它四舍五入到一整天…可能是你的服务器时区没有更新。检查以下各项:)很奇怪。看起来2月29日之后的一切,每天只有23个小时。这与2012-02-29没有多大关系;这是由于美国在3月的第二个星期日(例如2012年3月11日)将标准时间改为夏令时。这一天比其他时间短了1个小时,计算结果正确但令人困惑。当时间从夏令时变为标准时间时,会出现相反的问题,例如,美国11月的第一个星期日,或2012-11-04。四舍五入到最接近的整数就足够了,这就是原因。只需使用即可轻松修复:
$start=newdatetime(“04/01”);echo$start->diff(新日期时间(“02/29”)->天标准时间和夏令时之间发生变化的时间因国家而异。在美国,现在是3月的第二个星期日,从2007年开始。在欧洲,这是四月的第一个星期天。