这是日期上的PHP错误吗?

时间:2016-10-01 23:26:46

标签: php

在PHP 5.6.14上执行此操作:

$a = strtotime('2016-10-01');
$b = $a+29*24*3600;
$c = $a+30*24*3600;
die(date("d/m/Y",$b).' - '.date("d/m/Y",$c));

将返回30/10/2016 - 30/10/2016

因为我希望$c代替31/10/2016而不是30/10/2016,这有多奇怪。这是一个PHP错误吗?

注意:我知道有几种方法可以进行日期操作,但我要特别询问这一点。如果我将$a月更改为10以外的其他数字(例如8,9,11,12),则会给出预期结果。

1 个答案:

答案 0 :(得分:1)

解决此问题的方法是在中午添加:

$a = strtotime('2016-10-01 12:00');
$b = $a+29*24*3600;
$c = $a+30*24*3600;
die(date("d/m/Y",$b).' - '.date("d/m/Y",$c));

之所以如此,是因为你没有花时间让PHP假设"现在"对于strtotime的时间部分。然后,您的国家/地区(以及服务器所在国家/地区)将在10月份节省日光,并且会缩短$c的结束时间值。

添加中午(12:00)会为您提供缓冲区。它不需要是12:00,因为1:00也可以工作,但我个人喜欢用12:00工作。