Проблема модификации даты через strtotime.

Добрый день.

Хочу поведать вам о небольшой проблеме с вычислением даты функцией strtotime.

Суть в следующем. Мне нужно было получить название предыдущего месяца. Ничего сложного в этой задаче нет:
$t = strtotime('-1 month');
echo strftime('%B', $t);

В большинстве случаев этот вариант отлично подходит. Т.к. сегодня 31 мая, то вышеуказанный код вернул 1 мая. А +1 month вернул вообще 1 июля. Странно. В такие моменты каждый PHP-программист начинает изобретать следующий велосипед:
$months = array(1=>'Январь','Февраль','Март'...);
echo $months[date('m')-1];

Но мне надоели эти костыльные решения, и я начал изучать вопрос.
Оказалось все можно решить намного проще:
$t = strtotime('first day of previous month');
echo strftime('%B', $t);

Этот код как раз вернет 1 апреля. Так что всем советую подробнее почитать о формате первого аргумента функции strtotime. Он не так прост как кажется.

Красивого кода и удачи.

Оригинал: http://habrahabr.ru/post/144959/

2 комментария

avatar
Необычное поведение. Но скорее всего это будет встречаться довольно редко.
avatar
Это на самом деле стандартное поведение. Нужно читать мануал внимательнее.

Оставить комментарий