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

Current Date is 29th March 2017

When I subtract 2 months using PHP and I get January

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

But when I subtract 1 month it gives March

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

strtotime() uses 30 day months and there are only 28 in days in February (this year) so will not yield a valid date in February. You could use the current day d or j and subtract that which will always put you in the previous month (-29 days):

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

This will get December from January as well.

As covered in the comments, there's no 29th Feb.

29th Feb becomes 1st March.

You may be better to get the current month number, -1 from it, and then get the textual representation.

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

Or, you could use DateTime if your PHP version allows (it should).

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

The only issue with this, that you might have spotted, is January will never return December. A quick ternary statement will catch that.

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