令人困惑的strtotime
这篇讲的是PHP中strtotime函数的一个常见坑点。当开发者使用“-1 month”、“+1 month”或“next month”等相对日期字符串时,结果往往出人意料。比如从2018-07-31执行strtotime("-1 month"),会得到2018-07-01而非预期的2018-06-30,这让人对函数的可靠性产生疑惑。 问题的根因在于strtotime的内部处理逻辑:它先执行月份运算,再对日期进行规范化。以2018-07-31为例,减一月后得到06-31,但6月没有31天,于是日期被自动调整为07-01,就像时间计算中2点60分等于3点一样。文章通过多个代码示例验证了这一原理,例如在2017-08-31上加一月会得到2017-10-01,在2017-01-31上使用next month会跳到2017-03-03,因为2月天数不足导致规范化后月份再进位。 如何解决这个陷阱?作者指出,从PHP5.3版本