我在PHP Version 5.3.1中得到了一个奇怪的结果,有人能解释下面的结果吗?
$secondsDiff = strtotime(date("2011-11-10")) - strtotime('2011-07-15');
return ($secondsDiff/86400);
它返回117.958333333 ??
当我使用更接近的日期时,它通常会起作用。
我查看了文档,但是找不到任何对此的引用。这是一个已知的PHP错误,我只需要学会与之共存或者我错过了一些非常明显的东西吗?
答案 0 :(得分:6)
这可能是由于DST开关,它会将周期长度增加或减少一个小时。
这可以通过舍入来解决,或者 - 更优雅地 - 通过PHP 5.3的新奇DateInterval class来设置,它可以将句点格式化为天和更多。
从手册中窃取:
<?php
$datetime1 = new DateTime('2009-10-11');
$datetime2 = new DateTime('2009-10-13');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%R%a days');
?>
答案 1 :(得分:1)
不要将秒数除以86400秒。它肯定会在大部分时间工作,但在某些情况下它会返回一个丑陋的数字。这就是这里发生的事情。通常的罪魁祸首是进入或退出夏令时。
执行此操作的缓慢方法是使用循环并调用mktime()
;现代的方法是使用DateInterval
类。
答案 2 :(得分:0)
strtotime()
函数使用TZ环境变量。这意味着当您转换该日期时,最终会得到一个不完全在午夜的时间戳,除非您碰巧为GMT设置了您的时区。
因此,如果您所在的地区有夏令时,那么11月份的日期将比7月份的时间减少一个小时。您可以使用您提供的两个日期轻松测试。在我的服务器上,一个出现在凌晨4点,另一个出现在各自日期的凌晨5点。
答案 3 :(得分:0)
另一种解决方案:在
中添加UTC到字符串$datetime1 = new DateTime('2009-10-11 UTC');
$datetime2 = new DateTime('2009-10-13 UTC');