2016-10-01 45 views
2

在PHP 5.6.14这样做:这是一个PHP日期错误?

$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

总是检查你的假设'var_dump($ a,$ b,$ c)'。你假设b和c有一定的价值,但你认为是错的。 – goat

+1

这也是为什么'DateTime'是为PHP添加日期的高级方法 – Machavity

+2

我认为这与夏令时有关 - 就好像你也用小时输出一样,你会得到'30/10/2016 00:00 - 30/10/2016 23:00',我们在10月30日(至少在我的国家)扣除一小时(因为DST)。 – Qirel

回答

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一部分时间。然后,在您所在的国家/地区(服务器所在的国家/地区),您可以在十月节省一昼夜的光,并且这会缩短关闭时间值$c

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

+0

谢谢!我没有想过它因为我住在一个没有它的国家:) – Idi

+0

刚刚检查了php.ini设置,是的它是“欧洲/柏林”。将它改为“亚洲/雅加达”解决了它。 – Idi

+0

很高兴有帮助。 – Tigger