我用它来回显两个日期之间的间隔天数,但第二行回显一个浮点数。
echo (mktime(0,0,0,10,27,2013)-mktime(0,0,0,8,18,2013))/(3600*24).'<br>';
echo (mktime(0,0,0,10,28,2013)-mktime(0,0,0,8,18,2013))/(3600*24).'<br>';
结果:
70
71.041666666667
谁能告诉我为什么?谢谢!
结果:71.041666666667。谁能告诉我为什么?谢谢!
我在 php.ini 中更改为 date.timezone = Asia/Shanghai,现在得到整数(正确)结果。
因为Asia/Shanghai
时区不使用 DST。例如尝试时区Europe/Berlin
(谁使用 DST),你会发现你有同样的问题:
date_default_timezone_set('Asia/Shanghai');
echo (mktime(0,0,0,10,28,2013)-mktime(0,0,0,8,18,2013))/(3600*24); # 71
date_default_timezone_set('Europe/Berlin');
echo (mktime(0,0,0,10,28,2013)-mktime(0,0,0,8,18,2013))/(3600*24); # 71.041666666667
使用夏令时 [蓝色] | 不再使用 DST [橙色] | 从未使用过夏令时[红色]
这就是为什么我总是建议使用DateTime而不是mktime(),strtotime()和类似的功能。DateTime正确处理闰年和时区。
$f = new DateTime('2013-08-18');
$t = new DateTime('2013-10-28');
echo $f->diff($t)->days; # 71
或单线(PHP >= 5.4):
echo (new DateTime('2013-08-18'))->diff(new DateTime('2013-10-27'))->days; # 71
因为在 PHP 中除法时,您总是会收到浮点数。
要获得 int,您必须对其进行舍入或强制转换。
$int = (int) $float;
或者
$int = round($float, 0);
一个例外是两个操作数都是整数(或可以转换为整数的字符串)并且它们是可整除的。