Я должен добраться в предыдущем месяце и год относительно текущей даты.
Однако посмотрите следующий пример.
// 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')
Так, мне ТОЛЬКО нужно в предыдущем месяце и год в a strtotime
- совместимый вид.
Ответ (спасибо, @dnagirl):
// Today is 2011-03-30
echo date('Y-m-d', strtotime('first day of last month')); // Output: 2011-02-01
date("m-Y", strtotime("-1 months"));
решил бы это