最近六个月在 PHP 中列出


Last six months list in PHP

我需要前六个月的列表,并使用以下代码。

for ($i=6; $i >= 1; $i--) {
  array_push($months, date('M', strtotime('-'.$i.' Month')));
}
print_r($months);

它给出了错误的输出,如下所示

Array
(
    [0] => 'Dec'
    [1] => 'Dec'
    [2] => 'Jan'
    [3] => 'Mar'
    [4] => 'Mar'
    [5] => 'May'
)

它必须是

Array
(
    [0] => 'Nov'
    [1] => 'Dec'
    [2] => 'Jan'
    [3] => 'Feb'
    [4] => 'Mar'
    [5] => 'Apr'
)

我错在哪里。请帮忙

您需要从每月的第一天开始计算。

$first  = strtotime('first day this month');
$months = array();
for ($i = 6; $i >= 1; $i--) {
  array_push($months, date('M', strtotime("-$i month", $first)));
}
print_r($months);
/*
Array
(
    [0] => Nov
    [1] => Dec
    [2] => Jan
    [3] => Feb
    [4] => Mar
    [5] => Apr
)
*/

和往常一样,我发布了执行此操作的对象方式:

$startDate = new DateTime('first day of this month - 6 months');
$endDate   = new DateTime('last month');
$interval  = new DateInterval('P1M'); // P1M => 1 month per iteration
$datePeriod = new DatePeriod($startDate, $interval, $endDate);
foreach($datePeriod as $dt) {
  array_push($months, $dt->format('M'));
}
/* output:
Array
(
   [0] => Nov
   [1] => Dec
   [2] => Jan
   [3] => Feb
   [4] => Mar
   [5] => Apr
)
*/

有关详细信息,请参阅日期时间、日期间隔和日期周期。

使用这个:

date('M',strtotime('-'.$i.' Month', strtotime(date('Y-m-01'))))

原因:因为今天是 5 月 31 日,而不是 evry 月份有 31 天。实际上,这个(我的意思是+/-月)函数并不那么可靠。你能猜出这个是什么意思吗:

print(date('Y-M-d',strtotime('+1 Month', strtotime(date('2012-01-30'))))."'n");