Ответ 1
Правильный способ сделать это действительно:
date('m', strtotime('-1 month'));
Как вы увидите, в январе с другими ответами происходят странные вещи.
Я пытаюсь получить число месяцем ранее текущего месяца (теперь это 04
(апрель), поэтому я пытаюсь получить 03
). Я пробую это:
date('m')-1;
но я получаю 3
. Но я хочу получить 03
.
Правильный способ сделать это действительно:
date('m', strtotime('-1 month'));
Как вы увидите, в январе с другими ответами происходят странные вещи.
В настоящее время принятый ответ приведет к неправильному ответу, если день месяца (для текущего дня) больше, чем в последний день месяца за предыдущий месяц.
например. Результат выполнения date('m', strtotime('-1 month'));
29 марта (в течение не-високосного года) будет 03, потому что 29 больше, чем любой день месяца в феврале, и, таким образом, strtotime('-1 month')
действительно вернется 1 марта.
Вместо этого используйте следующее:
date('n') - 1;
Вы можете быть удивлены, но дата() на странице руководства по функциям имеет точный пример того, что вам нужно:
$lastmonth = mktime(0, 0, 0, date("m")-1, date("d"), date("Y"));
Результатом вашего расчета является число. Если вы хотите отформатировать его как строку, вы можете использовать:
$result = date('m')-1;
$string_result = sprintf("%02s", $result);
Изменить: Обратите внимание, что это лишь частичное решение для форматирования числа, такого как строка.
intval(date('m'))
за текущий месяц
(intval(date('m'))-1)%12
за предыдущий месяц, также за декабрь/январь
date('m', strtotime('last month'));
Это будет работать независимо от того, в январе вы или нет
Это тоже работает.
printf("%02s", (date('m') - 1));
Это должно сделать это для вас...
str_pad(date('m')-1, 2, '0', STR_PAD_LEFT);