php strtotime相对时间-1month的使用问题
历史代码的一个问题
➜ ~ date
Tue Mar 31 17:37:20 CST 2020
➜ ~ php -r "echo date('Y-m', strtotime('-1 month'));"
2020-03
➜ ~ php -r "echo date('Y-m', strtotime('+1 month'));"
2020-05
当前日期是2020年03月31日,直观感觉减一个月应该是输出2020-02,加一个月应该是输出2020-04。
➜ ~ cal 2 2020
February 2020
Su Mo Tu We Th Fr Sa
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
➜ ~ cal 3 2020
March 2020
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
➜ ~ cal 4 2020
April 2020
Su Mo Tu We Th Fr Sa
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
其实是程序跟人理解不同造成的:
2020年03月31日,减一个月等于 2020年02月31日,系统没有2020年02月31日,往前加就等于2020年03月02日
2020年03月31日,加一个月等于 2020年04月31日,系统没有2020年04月31日,往前加就等于2020年05月01日
#php5.3之前可以采用:
➜ ~ php -r "echo date('Y-m-d', strtotime(date('Ym01').' -1 month'));"
2020-02-01
#php5.3之后可以采用:
➜ ~ php -r "echo date('Y-m-d', strtotime('first day of -1 month'));"
2020-02-01 ➜ ~ php -r "echo date('Y-m-d', strtotime('last day of -1 month'));"
2020-02-29