我有一个计算两个日期之间的天差的函数:PHP mktime地狱
function daysBetweenDates($startDate, $endDate) {
list($year1, $month1, $day1) = explode('-', $startDate);
list($year2, $month2, $day2) = explode('-', $endDate);
$f = mktime(0, 0, 0, $month2, $day2, $year2);
$i = mktime(0, 0, 0, $month1, $day1, $year1);
$difference = $f - $i;
$days = floor($difference/86400);
return $days;
}
的问题是,这种代码也越来越有一些怪异的日期结果。例如,如果$startDate = '2014-10-14'
和$endDate = '2014-10-28'
,这个函数的输出无处不在14
,但我得到13
。
我检查了一些在线PHP解释器和一些该死的原因,我不知道为什么,我的mktime
正在返回我不同的值。
实施例:
上3v4l.org
上3v4l.org
运行mktime(0, 0, 0, 10, 14, 2014)
返回1413237600
为PHP versions 5.1.0 - 5.5.8
功能的具有这些值的输出是14
运行mktime(0, 0, 0, 10, 28, 2014)
返回1414450800
为PHP versions 5.1.0 - 5.5.8
。
在我的代码中,当我在mktime
上运行相同的值时,我分别得到1414461600
和1413255600
。运行此代码的函数的输出是13
。
而我正在运行PHP 5.3.3
。
任何帮助了解我的环境/ php配置/功能错误/错误代码的错误将不胜感激。
在您的php.ini文件中定义的默认时区设置中,您的日期之间是否存在夏时制转换? –
这两个时间戳之间的差异是13天23小时。所以必须有DST变化。 – Barmar
尝试使用'round()'而不是'floor()'。 – Barmar