PHP日期在减去一个月后返回错误的月份

时间:2017-03-29 15:08:13

标签: php date

当前日期是2017年3月29日

当我使用PHP减去2个月时,我得到January

$prevmonth = date('M', strtotime('-2 months'));
echo $prevmonth;

但是当我减去1个月时,它会给出March

$prevmonth = date('M', strtotime('-1 months'));
echo $prevmonth;

2 个答案:

答案 0 :(得分:1)

strtotime()使用30天的月份,2月(今年)只有28天,因此2月份不会生成有效日期。您可以使用当前日期dj,并减去上个月(-29 days)总是会显示的日期:

$prevmonth = date('M', strtotime('-' . date('d') . ' days'));

这也将从December获得January

答案 1 :(得分:0)

如评论中所述,2月29日没有。

2月29日成为3月1日。

您可能最好从中获取当前月份数,-1,然后获取文本表示。

$prevMonth = date('n') - 1;
$prevMonthText = date('M', mktime(0, 0, 0, $prevMonth, 10));

或者,如果您的PHP版本允许(它应该),您可以使用DateTime

$prevMonth = date('n') - 1;
$dateObj   = DateTime::createFromFormat('!m', $prevMonth);
$monthName = $dateObj->format('M'); // March

你可能已经发现的唯一问题是1月永远不会回到12月。一个快速的三元声明将抓住这一点。

$prevMonth = ((date('n') - 1) < 1) ? 12 : date('n') - 1;