2016-05-13 3 views
0

1970にまでさかのぼることは、私の機能ここでPHPのDATE機能が正しく動作していないと日付がここ

public function test($input, $duration){ 

     $input = date_create($input); 
     $month = date_format($input,'m-Y'); 

     $monthsArray[] = array(
       'month' => $month, 
      ); 

     for($i=0; $i<$duration; $i++){ 

      $monthsArray[]= array(

       'month' => date('m-Y', strtotime("$i months", strtotime($month))), 

       ); 
     } 

     var_dump($monthsArray); 
    } 

私の入力があり、

test(05-2016,3); 

結果はこのようにする必要があり、ある

05-2016 06-2016 07-2016 08-2016

しかし、この機能は

05から2016 01から1970 02から1970 03から1970

+0

日付関数は、1970年1月1日を返します。 (ドキュメントを読む)。だから、そこから始めよう。実際に '-2011'である' 05-2016'のようなものではなく、有効な日付で渡されている絶対的なCERTAINを作ります。 – kainaw

答えて

1

あなたはここで、この

<?php 
function test($dt,$months){ 
    echo "\n".$dt; 
    for($i=1;$i<=$months;$i++){ 
    $increseby = "+"."$i"; 
    echo "\n".date('m-Y',strtotime('1-'.$dt." $increseby month")); 
    } 
} 
test('05-2016',3); 
?> 

チェックのように使用することができます:あなたはそれを与える入力が有効な日付でない場合https://eval.in/570870

3

ご入力日付が有効な形式ではなく、また、それは、IDSので、引用符で囲まれる必要があるが返されます文字列。あなたはその日付を解析するためにDateTime::createFromFormat()を使用する必要が私の形式を使用しようとしている場合はそうでなければ、5から2016を引いている:

<?php 

function test($input, $duration){ 

    $date= DateTime::createFromFormat('m-Y', $input); 
    $monthsArray = [$input]; 

    for($i=0; $i<$duration; $i++){ 
     $date->modify('+1 month'); 
     $monthsArray[] = $date->format('m-Y'); 
    } 

    var_dump($monthsArray); 
} 

test('05-2016',3); 

Demo

それが必要とされていないとして、私はstrtotime()の使用状況を削除しました日付の操作に推奨されます。

また、すべての月に30日または31日があるわけではないため、このコードは月末に破損することに注意してください。

関連する問題