一个月的数字表示,带或不带前导零

时间:2016-05-31 16:00:14

标签: php datetime

将月份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]

3 个答案:

答案 0 :(得分:2)

我建议你在循环中添加一个简单的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 :(得分:1)

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

答案 2 :(得分:-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]