Текущая дата – 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;