在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),则会给出预期结果。
答案 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工作。