В настоящее время принятый ответ приведет к неправильному ответу, если день месяца (для текущего дня) будет больше, чем последний день месяца в предыдущем месяце.
Например, результат выполнения date('m', strtotime('-1 month'));
29 марта (не в високосном году) будет 03, потому что 29 больше, чем любой день месяца февраля, и, таким образом, strtotime('-1 month')
будет фактическивозврат 1 марта.
Вместо этого используйте следующее:
date('n') - 1;