Мне нужно получить предыдущий месяц и год относительно текущей даты.
Однако, см. следующий пример.
// Today is 2011-03-30
echo date('Y-m-d', strtotime('last month'));
// Output:
2011-03-02
Это поведение понятно (до определенной точки) из-за разного количества дней в феврале и марте, а код в приведенном выше примере - это то, что мне нужно, но работает только на 100% правильно между 1 и 28 числами каждого месяца.
Итак, как получить последний месяц И год (подумайте о date("Y-m")
) самым элегантным образом, который работает каждый день в году? Оптимальное решение будет основано на анализе аргументов strtotime
.
Update. Чтобы немного уточнить требования.
У меня есть фрагмент кода, который получает статистику за последние несколько месяцев, но сначала я показываю статистику за последний месяц, а затем загружаю другие месяцы, когда это необходимо. Это намеченная цель. Итак, в течение этого месяца я хочу узнать, какой месяц-год я должен потянуть, чтобы загрузить ПРЕДЫДУЩИЕ месячные статистические данные.
У меня также есть код, который имеет отношение к часовому поясу (на самом деле это не важно сейчас), и принимает 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