2014-04-17 2 views
0

날짜 형식 yyyymm에 한 달 추가해야합니다. 예를 들면. '201312'는 '201401'이됩니다. 여기 내가 현재 가지고있는 것이고 올바르게 작동하지 않습니다.yyyymm 형식으로 월 추가

function addMonth($year_month){ 
$year_month = (int) $year_month; 
if($year_month%100 == 1) {return $year_month-89;} 
return $year_month+1; 
} 

답변

3

이것은 당신이 정수에 충실하려는 경우 DateInterval()

function addMonth($year_month){ 
    $date = DateTime::createFromFormat('Ym', $year_month); 
    $date->add(new DateInterval('P1M')); 
    return $date->format('Ym'); 
} 
0

를 사용 DateTime()

function addMonth($year_month){ 
    $date = DateTime::createFromFormat('Ym', $year_month); 
    $date->modify('+1 month'); 
    return $date->format('Ym'); 
} 

대체를 사용하면 쉽게 시도 :

function addMonth($year_month){ 
    $year_month = (int) $year_month; 
    if($year_month%100 == 12) 
     return $year_month+89; 
    else 
     return $year_month+1; 
} 
0

날짜 시간 에스 John Condes와 같은 고열은 아마도 더 좋을 것입니다.하지만 경험을 위해 자신 만의 롤을 만들고 싶다면 아래에있는 것과 같은 것이 효과적 일 것입니다.

div와 modulos을 사용하면 올바른 이유로 2 개월을 추가해야하는 경우 더 좋은 결과를 얻을 수 있습니다.

<? 
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"; 
?> 

On Codepad this outputs :

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); 
} 
0

많은 simpeler :

$month = 201712 ; 
$nextMonth = date("Ym", strtotime($month . '01 + 1 month')); 
echo $nextMonth ; 

결과 :

201801 
관련 문제