php中使用日期函数,遇到奇怪现象,
date("Y-m-d", strtotime("-1 month", strtotime("2018-10-31")));
上面的理论输出2018-09-30,但是确输出2018-10-01,
后来查了一下,发现鸟哥博客里有答案,他是这么解释的
我们来模拟下date内部的对于这种事情的处理逻辑:
- 先做-1 month, 那么当前是10-31, 减去一以后就是09-31.
- 再做日期规范化, 因为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]