Попытка получить номер за месяц до текущего месяца - PullRequest
20 голосов
/ 20 апреля 2011

Я пытаюсь получить номер за месяц до текущего месяца (сейчас 04 (апрель), поэтому я пытаюсь получить 03).Я пытаюсь это:

date('m')-1;

но я получаю 3.Но я хочу получить 03.

Ответы [ 8 ]

39 голосов
/ 20 апреля 2011

Правильный способ сделать это на самом деле:

date('m', strtotime('-1 month'));

Как вы увидите, странные вещи происходят в январе с другими ответами.

3 голосов
/ 29 марта 2015

В настоящее время принятый ответ приведет к неправильному ответу, если день месяца (для текущего дня) будет больше, чем последний день месяца в предыдущем месяце.

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

Вместо этого используйте следующее:

date('n') - 1;
1 голос
/ 20 апреля 2011

Вы можете быть удивлены, но на странице справки по функция date () есть точный пример того, что вам нужно:

$lastmonth = mktime(0, 0, 0, date("m")-1, date("d"), date("Y"));
0 голосов
/ 17 июня 2019
date('m', strtotime('last month'));

Это будет работать независимо от того, находитесь ли вы в январе

0 голосов
/ 01 сентября 2016
intval(date('m'))

за текущий месяц

(intval(date('m'))-1)%12

за предыдущий месяц, также за декабрь / январь

0 голосов
/ 20 апреля 2011

Это тоже работает.

printf("%02s", (date('m') - 1));
0 голосов
/ 20 апреля 2011

Это должно сделать это для вас ...

str_pad(date('m')-1,  2, '0', STR_PAD_LEFT);
0 голосов
/ 20 апреля 2011

Результатом вашего расчета является число. Если вы хотите отформатировать его как строку, вы можете использовать:

$result = date('m')-1;
$string_result = sprintf("%02s", $result);

Редактировать: Обратите внимание, что это только частичное решение для форматирования числа как строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...