PHP strtotime () «первый понедельник февраля» возвращает второй понедельник, если 1 февраля - понедельник - PullRequest
6 голосов
/ 11 октября 2011

Я работаю над функцией PHP, которая вычисляет праздники:

function holidays($country = 1, $timespan_start = 0, $timespan_end = 0)

Праздники возвращаются как метки времени в массиве.

Поскольку мне нужно вычислять даты, как в первый понедельник февраля, я попытался strtotime("first monday february $year") и обнаружил, что это не работает в 2010 году, поскольку 01.02.2010 - понедельник - вместо этого я получаю 8 февраля.

Эта ошибка фактически упоминается в журнале изменений: В PHP 5 до 5.2.7, запрос данного вхождения данного дня недели в месяце, где этот день недели был первым днем ​​месяца, неверно добавил бы одну неделю к возвращенной метке времени. Это было исправлено в 5.2.7 и более поздних версиях.

Но я использую PHP 5.3.8. Почему я испытываю эту ошибку?

Ответы [ 2 ]

11 голосов
/ 11 октября 2011

Похоже, вам просто не хватает "of":

echo date('Y-m-d', strtotime('first monday of february 2010'));

даст ожидаемый результат .См. Руководство по PHP по относительным датам для различных форматов ввода.

2 голосов
/ 07 марта 2015

В зависимости от вашей версии PHP оператор 'of' может работать или не работать.В качестве другого решения попробуйте:

echo date('Y-m-d',strtotime('monday February 2010'));

вернет первый понедельник февраля 2010 года. Работает также для всех дней.

...