PHP日期/时间问题

PHP日期/时间问题,php,date,time,strtotime,Php,Date,Time,Strtotime,因此,我试图得到以下日期的天数差异。对其中一个来说,它是有效的,但对另一个来说,这个数字是关闭的。应该是3 我可以使用ceil函数,但我仍然不知道为什么下面的内容不正确 $checkOut = strtotime('2011-02-16'); $checkIn = strtotime('2011-02-11'); echo ($checkOut - $checkIn) / (60 * 60 * 24); // => 5 echo floor(($checkOut - $checkIn)/(60*

因此,我试图得到以下日期的天数差异。对其中一个来说,它是有效的,但对另一个来说,这个数字是关闭的。应该是3

我可以使用
ceil
函数,但我仍然不知道为什么下面的内容不正确

$checkOut = strtotime('2011-02-16'); $checkIn = strtotime('2011-02-11'); echo ($checkOut - $checkIn) / (60 * 60 * 24); // => 5 echo floor(($checkOut - $checkIn)/(60*60*24)); // => 5 $checkOut = strtotime('2011-03-14'); $checkIn = strtotime('2011-03-11'); echo ($checkOut - $checkIn) / (60 * 60 * 24); // => 2.958333333 echo floor(($checkOut - $checkIn)/(60*60*24)); // => 2 $checkOut=strotime('2011-02-16'); $checkIn=strotime('2011-02-11'); echo($checkOut-$checkIn)/(60*60*24);//=>5. 回声楼层(($checkOut-$checkIn)/(60*60*24));//=>5. $checkOut=strotime('2011-03-14'); $checkIn=strotime('2011-03-11'); echo($checkOut-$checkIn)/(60*60*24);//=>2.958333333 回声楼层(($checkOut-$checkIn)/(60*60*24));//=>2. 您可能需要使用()来解决该问题


通过使用floor(),您实际上得到了下一个较低的整数(去掉逗号后的所有内容)

为什么不使用php面向对象工具


所以问题是因为它跨越了夏令时。尽管PHP规范中说strotime从epoch开始返回秒数,但我想情况并非如此。

就是这样!谢谢虽然PHP规范说,
strotime
从epoch开始返回秒数,但我想不是这样的expected@James它从epoch开始返回秒数,但它将输入日期解释为在某个时区(可能不是UTC)啊,好的观点。不确定我们的生产系统使用的是什么PHP版本,但是如果我指定UTC,假设它可以工作,我就这样做。嗯,当然它会返回自纪元以来的秒数。从/到DST的切换使一天缩短/延长3600秒,因此这3600秒在“从纪元开始的秒数”中丢失了。。。我不相信这是真的,即使根据我给出的定义。
<?php
$datetime1 = new DateTime('2011-03-11');
$datetime2 = new DateTime('2011-03-14');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%R%a days');