strtotime () 的-1month 的问题
在PHP当中我们可以这样获取距离当前时间的每个月的月份,比如说下面的代码是获取当前时间往前的12个月份:
<?php
$i = 12;
while($i >= 1) {
echo date('Y-m', strtotime('-' . $i . ' month')) . "\n";
$i--;
}
输出结果:
2017-09
2017-10
2017-11
2017-12
2018-01
2018-02
2018-03
2018-04
2018-05
2018-06
2018-07
2018-08
写博客时是9月3号。
输出的结果没有问题,可以获取到当前之间前面的12个月份。但是下面这个情况就无法输出正确的结果了:
<?php
$i = 12;
while($i >= 1) {
echo date('Y-m', strtotime('-' . $i . ' month', strtotime('2018-8-31 12:00'))) . "\n";
$i--;
}
输出结果:
2017-08
2017-10
2017-10
2017-12
2017-12
2018-01
2018-03
2018-03
2018-05
2018-05
2018-07
2018-07
为什么出现这种情况?因为每个月的天数是不一样的,所以如果带上天数的话会出现bug的,特别是在每月的31号。可以用下面的方法解决:
<?php
$i = 12;
while($i >= 1) {
echo date('Y-m', strtotime('-' . $i . ' month', strtotime('2018-8'))) . "\n";
$i--;
}
输出结果:
2017-08
2017-09
2017-10
2017-11
2017-12
2018-01
2018-02
2018-03
2018-04
2018-05
2018-06
2018-07
唯一变动的地方是 strtotime('2018-8')
。
原文地址:《小滕博客》
本作品采用《CC 协议》,转载必须注明作者和本文链接
开源教育系统 www.meedu.vip
推荐文章: