0

我用它来回显两个日期之间的间隔天数,但第二行回显一个浮点数。

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

谁能告诉我为什么?谢谢!

4

2 回答 2

-1

结果:71.041666666667。谁能告诉我为什么?谢谢!

回答:由于DST,您会得到那种结果。

我在 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
于 2013-09-27T09:22:18.250 回答
-1

因为在 PHP 中除法时,您总是会收到浮点数。

要获得 int,您必须对其进行舍入或强制转换。

 $int = (int) $float;

或者

 $int = round($float, 0);

一个例外是两个操作数都是整数(或可以转换为整数的字符串)并且它们是可整除的。

于 2013-09-27T06:43:23.510 回答