PHP Strtotime ошибочная функция - PullRequest
1 голос
/ 30 марта 2011

Следующий код должен взять четвертую пятницу февраля и четвертую пятницу апреля и вернуть его.

$datei1 = date(strtotime('fourth friday', strtotime('february', strtotime(date('01-m-Y')))));

$datei2 = date(strtotime('fourth friday', strtotime('april', strtotime(date('01-m-Y')))));

Работает, но принимает пятую пятницу апреля, а не четвертую.Я могу только предположить, что он не верит в число первых апреля.

Любые идеи,

Чудесные

Ответы [ 4 ]

4 голосов
/ 30 марта 2011

Ваш код очень сложен без причины.Попробуйте это (PHP 5.3):

$date = date('Y-m-d', strtotime('fourth friday of april 2011'));

Это даст вам:

2011-04-22

В PHP 5.2 этот синтаксис , кажется, работает во всех случаях:

$date = date('Y-m-d', strtotime('fourth friday', strtotime('april - 1 second')));
2 голосов
/ 30 марта 2011

strtotime('fourth friday', $now) вероятно, действительно означает "четвертая пятница относительно $now".

Параметр $now, который вы указываете, - 1 апреля 2011 года, то есть пятница. Четвертая пятница после Пт 1 апреля - пятая пятница месяца.

1 голос
/ 30 марта 2011

Похоже, вы используете более старую версию PHP.Основные изменения были внесены для обработки крайнего случая, который вы здесь испытываете.В таком случае я считаю, что следующий подход является самым чистым:

echo date('Y-m-d', strtotime('+4 fridays', mktime(0,0,0,4,0,date('Y'))));
// or
echo date('Y-m-d', strtotime('fourth friday', mktime(0,0,0,4,0,date('Y'))));

Это должно дать вам четвертую пятницу в апреле текущего года.Я успешно протестировал в 5.3, но вам придется протестировать на вашей старой установке.

0 голосов
/ 30 марта 2011

PHP Changelog ::

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

...