奇怪的strtotime

php中使用日期函数,遇到奇怪现象,

date("Y-m-d", strtotime("-1 month", strtotime("2018-10-31")));

上面的理论输出2018-09-30,但是确输出2018-10-01,
后来查了一下,发现鸟哥博客里有答案,他是这么解释的

我们来模拟下date内部的对于这种事情的处理逻辑:

  1. 先做-1 month, 那么当前是10-31, 减去一以后就是09-31.
  2. 再做日期规范化, 因为9月没有31号, 所以就好像2点60等于3点一样, 9月31就等于了7月1

那怎么办呢?

从PHP5.3开始呢, date新增了一系列修正短语, 来明确这个问题, 那就是”first day of” 和 “last day of”, 也就是你可以限定好不要让date自动”规范化”:

 date("Y-m-d", strtotime("last day of -1 month", strtotime("2018-10-31")));

这样输出2018-09-31,如果想输出当月第一天,就改成


date("Y-m-d", strtotime("first day of -1 month", strtotime("2018-10-31")));
[鸟哥博客有答案][1]
添加新评论