使用此代码:
echo strtotime("2018-03-31 -1 month");
PHP返回2018年3月3日的日期,这很奇怪,这是strtotime这个永恒的错误吗?是否有一些PHP库提供更直观的结果?
答案 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