获取 PHP 中最近 12 个月的信息

2022-08-30 16:50:16

这是我今天学到的一个有趣的问题。

我需要用过去 12 个月填充数组,从过去一个月开始。因此,在2011年8月,最后12个月将是2010年9月至2011年7月。为此,我正在使用:

for ($i = 1; $i <= 12; $i++)
    $months[] = date("Y-m%", strtotime("-$i months"));

上面的代码在8月30日工作正常。我得到最近 12 个月:

array
    0 => string '2011-07%' (length=8)
    1 => string '2011-06%' (length=8)
    2 => string '2011-05%' (length=8)
    3 => string '2011-04%' (length=8)
    4 => string '2011-03%' (length=8)
    5 => string '2011-02%' (length=8)
    6 => string '2011-01%' (length=8)
    7 => string '2010-12%' (length=8)
    8 => string '2010-11%' (length=8)
    9 => string '2010-10%' (length=8)
    10 => string '2010-09%' (length=8)
    11 => string '2010-08%' (length=8)

但是当我在8月31日运行这个时,我得到:

array
    0 => string '2011-07%' (length=8)
    1 => string '2011-07%' (length=8)
    2 => string '2011-05%' (length=8)
    3 => string '2011-05%' (length=8)
    4 => string '2011-03%' (length=8)
    5 => string '2011-03%' (length=8)
    6 => string '2011-01%' (length=8)
    7 => string '2010-12%' (length=8)
    8 => string '2010-12%' (length=8)
    9 => string '2010-10%' (length=8)
    10 => string '2010-10%' (length=8)
    11 => string '2010-08%' (length=8)

我尝试过Windows和Unix。有人对此有解决方案吗?


答案 1

我相信有人有一个更优雅的解决方案,但你可以从本月1日开始倒数。

for ($i = 1; $i <= 12; $i++) {
    $months[] = date("Y-m%", strtotime( date( 'Y-m-01' )." -$i months"));
}

答案 2

这是因为不是每个月都有31日。因此,正在推进到下个月。即 4/31 = 5/1。strtotime()

你最好用它来使用它,因为它比.mktime()strtotime()

更新

为了利用像 这样的智能功能并避免跟踪年份,以下是我的建议:strtotime()mktime()

$month = time();
for ($i = 1; $i <= 12; $i++) {
  $month = strtotime('last month', $month);
  $months[] = date("r", $month);
}
print_r($months);

调整逻辑并根据需要进行优化。


推荐