: на входе указана полная дата ('y-m-d') и на выходе ('y-m-d'), вы можете изменить этот код в соответствии со своими потребностями.

ужно получить предыдущий месяц и год относительно текущей даты.

Однако см. Следующий пример.

// 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