PHP находит первый четверг месяца

Я работаю над программой управления временем, и мне было интересно, как я найду первый четверг в определенном месяце. Есть ли в PHP какие-либо функции, помогающие в этом? strtotime не хочет правильно форматировать некоторые строки.

Если я использую strtotime("first thursday december 2011"), он возвращает 1323302400, что на самом деле является вторым четвергом (8 декабря).

Если я использую strtotime("first thursday december 2011 - 1 week"), он возвращает 1322092800, то есть 24 ноября.

Может кто-нибудь протянуть руку, пожалуйста!


person dotty    schedule 12.12.2011    source источник
comment
Это может вам помочь: stackoverflow.com/questions/924246/   -  person Nick    schedule 12.12.2011
comment
Обратите внимание, что многие примеры здесь будут работать, но они принципиально упустили вашу простую ошибку, которая имеет очень простое решение. См. мой ответ ниже: stackoverflow.com/a/8478145/538216   -  person Levi Morrison    schedule 12.12.2011


Ответы (4)


Прочитайте ошибку PHP #53539. Исправление заключается в использовании of: strtotime("first thursday of december 2011")

Обратите внимание, что многие ошибки DateTime были исправлены в PHP 5.3. Если вы используете ‹ 5.3, вам действительно следует обновиться.

person Levi Morrison    schedule 12.12.2011
comment
Это отличный ответ! Жаль, что strtotime — это чистая магия, почти без документации. - person Emil Vikström; 12.12.2011
comment
@Josh Я начинаю разрабатывать для PHP Core. У меня нет принятых исправлений пока, но всякий раз, когда я нахожу что-то подобное, я уверен, что отчет об ошибке подан по адресу bugs.php.net. Просто нужен тщательный поиск :) - person Levi Morrison; 12.12.2011
comment
@Levi Спасибо за совет. Если я столкнусь с неясной ошибкой, подобной приведенной выше, я проверю bugs.php.net, прежде чем спрашивать о SO. - person Josh; 12.12.2011
comment
Также я узнал, что first thursday december 2011 + 1 second также дает правильный ответ. - person dotty; 13.12.2011
comment
Этот ответ не работает для меня. echo strtotime("first thursday of december 2011"); ничего не возвращает браузеру. Я использую PHP 5.2.15. - person dotty; 13.12.2011
comment
@dotty Если date('Y-m-d', strtotime('first thursday of december 2011')) не печатает правильную дату, то вы определенно нашли ошибку. Тем не менее, это определенно проблема версии PHP, которая была исправлена. Ваш конкретный случай исправлен в PHP 5.3. Я знаю, что до PHP 5.3 было много ошибок даты и времени. - person Levi Morrison; 13.12.2011
comment
Мы должны четко указать, что версия PHP 5.2 находится на стадии завершения (EOL) и была еще в декабре 2011 года. Поэтому, пожалуйста, не ожидайте, что ошибки в PHP 5.2 будут исправлены. Вместо этого подумайте об обновлении до PHP 5.3 или PHP 5.4. - person hakre; 16.08.2012
comment
@hakra Думаю, я не очень хорошо это сказал: в PHP 5.2 много относительных ошибок DateTime, которые исправлены в PHP 5.3. Вы ДОЛЖНЫ обновить. - person Levi Morrison; 16.08.2012

strtotime('next thursday', strtotime('last day of november'));

или даже чище:

strtotime('thursday', strtotime('1 december'));
person Emil Vikström    schedule 12.12.2011

Аналогичная функция есть здесь, для первого понедельника месяца. Это помогает?

person SuperTron    schedule 12.12.2011

person    schedule
comment
Это вообще не работает. Ваш код просто вернет 4-е число текущего месяца. Вот вызов, эквивалентный вашему: date('d/04/Y') - person Emil Vikström; 12.12.2011
comment
@EmilVikström Вы действительно пробовали, чтобы узнать, что это не работает? - person Charming Prince; 14.12.2011
comment
Да, я пробовал. Вот он, размещенный на моей машине: lajm.eu/emil/dump/tmp_date.php - person Emil Vikström; 14.12.2011
comment
@EmilVikström обновил коды. Думаю, это должно сработать. - person Charming Prince; 15.12.2011