2016-05-31 73 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

你只是張貼了這個問題和答案,你要去接受,內*彼此一秒*? – Ben

+0

@Ben任何人比我的解決方案有更好的解決方案將被接受,而不是我自己的解決方案 – itsazzad

+0

我認爲你錯過了這個網站的重點......這是爲人們遇到的問題,他們無法解決找到有用的解決方案。你只是把一個問題,你已經知道答案,爲了什麼目的? – Ben

回答

1

我建議你在循環中添加一個簡單的var_dump($date);語句,以便了解發生了什麼。

您不能有不完整的日期,因此未提供的詳細信息將從當天獲取。因此,當您說「二月」時,PHP會理解「2016年2月31日」,因爲今天是2016年5月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]"; } 輸出: [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]"; 
}