2016-05-31 7 views
0

変換月without leading zeroからwith leading zeroへの出力が間違っています。月の数値表現(先行ゼロの有無を問わず)

foreach(range(1,12) as $iM){ 
    $date = DateTime::createFromFormat('n', $iM); 
    $m=intval($date->format('m')); 
    echo "[$iM, $m]"; 
} 

Outout:私はこの私が、共通の年と一日で日付と月をフォーマットしています解決策、および変数月に予定しています

[1, 1][2, 3][3, 3][4, 5][5, 5][6, 7][7, 7][8, 8][9, 10][10, 10][11, 12][12, 12] 
+0

あなたはちょうどあなたがお互いの1秒* *内、受け入れるつもりだ、この質問と回答を、投稿しましたか? – Ben

+0

@Ben私のソリューションよりも優れたソリューションをお持ちの方は、自分のソリューションの代わりに受け入れることになります – itsazzad

+0

私はあなたがこのサイトのポイントを見逃していると思います...それは解決できない問題を持つ人々のためのものです。どのような目的のために答えを知っているのですか? – Ben

答えて

1

単純なvar_dump($date);ステートメントをループ内に追加して、何が起こっているかを確認することをお勧めします。

不完全な日付を設定することはできませんので、提供されていない詳細は現在の日付から取得されます。 2016年5月31日のため、PHPは「2月31日」を理解しています。無効な日付なので、PHPは来月に適切な日数をカウントし、「2016年3月2日」を取得します。番号が何を意味するかにもかかわらず

、あなただけのこの操作を行うことができます。

// Add leading zero 
$m = sprintf('%02d', $iM); 

// Remove leading zero 
$iM = (int)$m; 
-1

CODE: foreach(range(1,12) as $iM){ $date = DateTime::createFromFormat('Y-d-n', "2016-01-".$iM); $m=intval($date->format('m')); echo "[$iM, $m]"; } outout: [1, 1][2, 2][3, 3][4, 4][5, 5][6, 6][7, 7][8, 8][9, 9][10, 10][11, 11][12, 12]

1
foreach(range(1,12) as $iM){ 
    $date = DateTime::createFromFormat('n', $iM); 
    $m=sprintf('%02d', intval($date->format('m')); 
    echo "[$iM, $m]"; 
}