我需要为日期格式yyyymm添加一个月。例如。 '201312'将导致'201401'。这是我目前所拥有的,但它无法正常工作。
function addMonth($year_month){
$year_month = (int) $year_month;
if($year_month%100 == 1) {return $year_month-89;}
return $year_month+1;
}
答案 0 :(得分:3)
如果您使用DateTime()
function addMonth($year_month){
$date = DateTime::createFromFormat('Ym', $year_month);
$date->modify('+1 month');
return $date->format('Ym');
}
使用DateInterval()
function addMonth($year_month){
$date = DateTime::createFromFormat('Ym', $year_month);
$date->add(new DateInterval('P1M'));
return $date->format('Ym');
}
答案 1 :(得分:0)
如果你想坚持整数,试试:
function addMonth($year_month){
$year_month = (int) $year_month;
if($year_month%100 == 12)
return $year_month+89;
else
return $year_month+1;
}
答案 2 :(得分:0)
像John Condes这样的约会时间解决方案可能会更好,但是如果你想为了体验而推出自己的解决方案,那么下面的内容将起作用。
使用div和modulos确保您处于正确的框架中会更好,如果由于某种原因需要添加2个月,您将不会在第13个月结束。
<?
function addMonth($year_month, $add=1){
$year_month = (int) $year_month + $add;
$month = $year_month % 100;
$year = (int)($year_month / 100 + $month / 12) ;
$month = (int)($month % 12);
return $year * 100 + $month;
}
print addMonth("200101"); echo "\n";
print addMonth("200101",14); echo "\n";
print addMonth("200112"); echo "\n";
?>
200102
200203
200201
如果需要,你可以进一步缩短它,但必须小于此开始看起来不可读):
function addMonth($year_month, $add=1){
$year_month = (int) $year_month + $add;
$months = $year_month % 100;
return (int)($year_month / 100 + $months / 12) * 100 + (int)($months % 12);
}
答案 3 :(得分:0)
很多simpeler:
$month = 201712 ;
$nextMonth = date("Ym", strtotime($month . '01 + 1 month'));
echo $nextMonth ;
结果:
201801