我需要前六个月的清单,并且正在使用以下代码。
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'
)
我哪里错了。请帮忙
答案 0 :(得分:10)
您需要从该月的第一天开始计算。
$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
)
*/
答案 1 :(得分:3)
与往常一样,我发布了这样做的对象方式:
$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
)
*/
有关详细信息,请参阅DateTime,DateInterval和DatePeriod。
答案 2 :(得分:0)
使用这个:
date('M',strtotime('-'.$i.' Month', strtotime(date('Y-m-01'))))
为什么:因为今天是5月31日而不是每月有31天。 这个(我的意思是+/-月)功能并不那么可靠。你能猜出这个的意思是什么:
print(date('Y-M-d',strtotime('+1 Month', strtotime(date('2012-01-30'))))."\n");