PHP strtotime函数的奇怪行为

时间:2018-04-10 09:31:03

标签: php date

使用此代码:

echo strtotime("2018-03-31 -1 month");

PHP返回2018年3月3日的日期,这很奇怪,这是strtotime这个永恒的错误吗?是否有一些PHP库提供更直观的结果?

1 个答案:

答案 0 :(得分:3)

这不是一个错误,但它并不完全直观。

2018-03-31 减去一个月是2月31日,这是不存在的。 PHP的strtotime实现处理任何"超出范围"这些日期是通过相关天数进入下个月,例如

echo date('Y-m-d', strtotime('April 31'));
// 2018-05-01

strtotime中使用 -1个月一词意味着跳回上个月的同一天,然后按上述方式执行任何必要的调整。 3月31日,你将于3月3日结束。如果你在1月31日使用 +1个月,你会看到同样的事情。

根据您在这种情况下确实想要发生的事情,这个问题的一些答案可能会有用:PHP: Adding months to a date, while not exceeding the last day of the month