PHP:无法在正确的年份获取月份

PHP:无法在正确的年份获取月份,php,forms,date,select,cakephp-2.x,Php,Forms,Date,Select,Cakephp 2.x,对于下面的代码,我希望有本月和下一年的12个月。我用了一个循环,除了一月份,一切都很好。我只是不知道出了什么问题 for ($i = 0; $i <= 12; $i++) { $months[ucfirst(strftime("%B %G", strtotime( date( 'Y-m' )." +$i months")))] = ucfirst(strftime("%B %G", strtotime( date( 'Y-m' )." +$i months"))); ech

对于下面的代码,我希望有本月和下一年的12个月。我用了一个循环,除了一月份,一切都很好。我只是不知道出了什么问题

for ($i = 0; $i <= 12; $i++) {
    $months[ucfirst(strftime("%B %G", strtotime( date( 'Y-m' )." +$i months")))] = ucfirst(strftime("%B %G", strtotime( date( 'Y-m' )." +$i months")));
    echo ucfirst(strftime("%B %G", strtotime( date( 'Y-m' )." +$i months")));
}

像这样的怎么样

<?php

$start = new DateTimeImmutable('first day of this month');
$interval = new DateInterval('P1M');
$period = new DatePeriod($start, $interval, 12);

foreach ($period as $date) {
    echo $date->format('F Y') . PHP_EOL;
}

像这样的怎么样

<?php

$start = new DateTimeImmutable('first day of this month');
$interval = new DateInterval('P1M');
$period = new DatePeriod($start, $interval, 12);

foreach ($period as $date) {
    echo $date->format('F Y') . PHP_EOL;
}
您可以简单地使用:

$date = new DateTime('first day of this month');

for ($i = 0; $i < 13; $i++) {
    echo $date->format('F Y,');
    $date->modify('+1 month');
}
产出将是:

2015年12月、2016年1月、2016年2月、2016年3月、2016年4月、2016年5月、2016年6月、2016年7月、2016年8月、2016年9月、2016年10月、2016年11月、2016年12月、

您可以简单地使用:

$date = new DateTime('first day of this month');

for ($i = 0; $i < 13; $i++) {
    echo $date->format('F Y,');
    $date->modify('+1 month');
}
产出将是:

2015年12月、2016年1月、2016年2月、2016年3月、2016年4月、2016年5月、2016年6月、2016年7月、2016年8月、2016年9月、2016年10月、2016年11月、2016年12月、


尝试使用date'M-y'而不是'y-M'提示:在进行包括时间在内的任何类型的计算时,不要滥用字符串。@Fredrik谢谢,它已经起作用了。但是为什么我的错了呢?试着用date'M-y'而不是'y-M'提示:在进行任何类型的计算(包括时间)时,不要滥用字符串。@Fredrik谢谢,它已经起作用了。但为什么我的错了呢?很抱歉,a需要荷兰语和一个var格式的表单中的select。Frederik的解决方案效果很好。如果当前日期接近月底,您可能会遇到跳过月份的问题。例如,设置$date=new DateTime的2015-12-31将跳过2月。你需要确定这是本月初。我刚核实过,你是对的。。我刚刚更新了我的答案。谢谢您的答案也很好:很抱歉,a需要用荷兰语和一个var来表示表单中的select。Frederik的解决方案效果很好。如果当前日期接近月底,您可能会遇到跳过月份的问题。例如,设置$date=new DateTime的2015-12-31将跳过2月。你需要确定这是本月初。我刚核实过,你是对的。。我刚刚更新了我的答案。谢谢你的回答也很好: