Я работаю над функцией PHP, которая вычисляет праздники:
function holidays($country = 1, $timespan_start = 0, $timespan_end = 0)
Праздники возвращаются как временные метки в массиве.
Поскольку я должен рассчитать даты, как в первый понедельник февраля, я попробовал strtotime("first monday february $year")
и я обнаружил, что это не работает в 2010 году, поскольку 02/01/2010 – понедельник – я получаю 8 февраля.
Эта ошибка на самом деле упоминается в журнале изменений: на PHP 5 до 5.2.7 запрос на заданное вхождение данного дня недели в месяц, когда этот день недели был первым днем месяца, неправильно добавит одну неделю к возвращенной отметке времени. Это было исправлено в 5.2.7 и более поздних версиях.
Но я использую PHP 5.3.8. Почему я испытываю эту ошибку?
Похоже, вы просто пропустили «из»:
echo date('Ym-d', strtotime('first monday of february 2010'));
даст ожидаемый результат . См. Руководство по PHP в отношении относительных дат для различных форматов ввода.
В зависимости от вашей версии PHP оператор 'of' может работать или не работать. В качестве другого решения попробуйте:
echo date('Ym-d',strtotime('monday February 2010'));
вернется в первое воскресенье февраля 2010 года. Работает и на все дни.