获得前 6 个月获得问题

时间:2021-01-01 06:09:00

标签: php

我遇到了根据月份数获取过去 6 个月的问题

    $vBillMonthPrev = '11';

        for ($i = 1; $i < 7; $i++) {
            $m_array[] = date("M-y", mktime(0, 0, 0, $vBillMonthPrev - $i, 15));
        }

foreach ($m_array as $months) {
           echo  $months;
        }

问题是上面的代码返回 Oct-21Sep-21Aug-21Jul-21Jun-21May-21 并且要求的结果应该是 Oct-20 Sep-20 Aug-20 Jul-20 Jun-20 May-20

2 个答案:

答案 0 :(得分:3)

处理年份问题的一种方法是将 $vBillMonthPrev 与当前月份进行比较,如果大于此值,则向 year 提供一个 mktime 参数,用于前一年。然后您可以从该日期创建一个 DateTime 对象,并在循环中减去一个月以将值生成到您的 $m_array 中。请注意,最好一次减去一个月,而不是创建一个新的日期变量,因为这样可以正确处理月份下溢到上一年的情况。

$vBillMonthPrev = '11';
$vBillYearPrev = (int)date('Y') - ((int)$vBillMonthPrev > (int)date('n') ? 1 : 0);

$date = date_create_from_format('U', mktime(0, 0, 0, $vBillMonthPrev, 15, $vBillYearPrev));

$m_array = array();
for ($i = 1; $i < 7; $i++) {
    $date->modify('-1 month');
    $m_array[] = $date->format('M-y');
}

print_r($m_array);

输出:

Array
(
    [0] => Oct-20
    [1] => Sep-20
    [2] => Aug-20
    [3] => Jul-20
    [4] => Jun-20
    [5] => May-20
)

Demo on 3v4l.org

答案 1 :(得分:0)

就这样添加一个年份参数

<?php
    $vBillMonthPrev = '11';
    for ($i = 1; $i < 7; $i++) {
        $m_array[] = date("M-y", mktime(0, 0, 0, $vBillMonthPrev - $i, 15, 2020));
    }

   foreach ($m_array as $months) {
       echo  $months;
    }
?>
相关问题