Текущая дата – 29 марта 2017 года
 Когда я вычитаю 2 месяца с помощью PHP, и я получаю January 
 $prevmonth = date('M', strtotime('-2 months')); echo $prevmonth; 
  Но когда я вычитаю 1 месяц, это дает March 
 $prevmonth = date('M', strtotime('-1 months')); echo $prevmonth; 
       
		  strtotime() использует 30-дневные месяцы, а в феврале (только в этом году) всего 28 дней, поэтому в феврале не будет дана действительная дата.  Вы можете использовать текущий день d или j и вычесть то, что всегда будет помещено в предыдущий месяц ( -29 days ): 
 $prevmonth = date('M', strtotime('-' . date('d') . ' days')); 
  Это будет December с January . 
Как указано в комментариях, нет 29 февраля.
29 февраля становится 1 марта.
Возможно, вам лучше получить текущий номер месяца, -1 из него, а затем получить текстовое представление.
 $prevMonth = date('n') - 1; $prevMonthText = date('M', mktime(0, 0, 0, $prevMonth, 10)); 
  Или, вы можете использовать DateTime если ваша версия PHP позволяет (она должна). 
 $prevMonth = date('n') - 1; $dateObj = DateTime::createFromFormat('!m', $prevMonth); $monthName = $dateObj->format('M'); // March 
Единственная проблема с этим, что вы, возможно, заметили, – январь никогда не вернется в декабре. Быстрое тернарное заявление поймает это.
 $prevMonth = ((date('n') - 1) < 1) ? 12 : date('n') - 1;