Мне нужно получить предыдущий месяц и год относительно текущей даты.
Однако см. Следующий пример.
// Today is 2011-03-30
echo date('Y-m-d', strtotime('last month'));
// Output:
2011-03-02
Такое поведение понятно (до определенного момента), из-зана разное количество дней в феврале и марте, и код в приведенном выше примере - это то, что мне нужно, но работает только на 100% правильно в период с 1 по 28 числа каждого месяца.
Итак, как получить последний месяц И год(представьте себе date("Y-m")
) самым элегантным из возможных способов, который работает на каждый день года?Оптимальное решение будет основано на разборе аргументов strtotime
.
Обновление.Чтобы немного уточнить требования.
У меня есть фрагмент кода, который получает статистику за последние пару месяцев, но я сначала показываю статистику за прошлый месяц, а затем загружаю другие месяцы, когда это необходимо.Это намеченная цель.Итак, в течение ЭТОГО месяца я хочу выяснить, какой месяц-год мне нужно выбрать, чтобы загрузить ПРЕДЫДУЩУЮ статистику за месяц.
У меня также есть код, который учитывает часовой пояс (сейчас это не очень важно),и он принимает strtotime
-совместимую строку в качестве входных данных (для инициализации внутренней даты), а затем позволяет настраивать дату / время, также используя strtotime
-совместимые строки.
Я знаю, что это можно сделать с помощьюнесколько условных выражений и базовая математика, но это действительно грязно, по сравнению с этим, например (если он работал правильно, конечно):
echo tz::date('last month')->format('Y-d')
Итак, мне нужны ТОЛЬКО предыдущие месяц и год, в strtotime
-совместимая мода.
Ответ (спасибо, @dnagirl):
// Today is 2011-03-30
echo date('Y-m-d', strtotime('first day of last month')); // Output: 2011-02-01