Мне очень нравится функция PHP strtotime (), но руководство пользователя не дает полного описания поддерживаемых форматов дат. Он дает лишь несколько примеров, таких как «10 сентября 2000 года», «+1 неделя 2 дня 4 часа 2 секунды» и «в следующий четверг».
Где я могу найти полное описание?
Я не могу найти ничего официального, но я увидел учебник, в котором говорится, что strtotime () использует GNU Date Input Formats. Они подробно описаны в руководстве GNU .
Одно несоответствие, которое я замечаю, это то, что «следующий» не соответствует поведению, описанному в руководстве GNU. Используя strtotime (), «следующий четверг» даст вам тот же результат, что и «четверг», если сегодня не четверг.
Если сегодня четверг, то
Если сегодня не четверг, то
Я использую PHP 5.2.6.
Обновить:
Я думаю, что руководство пользователя обновлено с тех пор, как я опубликовал это, иначе я был слепым. Теперь он содержит ссылку на главу « Дата и время» , в которой содержится раздел об относительных форматах .
Вы можете начать отслеживать, что он делает, посмотрев следующий код на C:
http://cvs.php.net/viewvc.cgi/php-src/ext/date/php_date.c
Поиск PHP_FUNCTION (strtotime)
Также это основной синтаксический анализ регулярных выражений:
http://cvs.php.net/viewvc.cgi/php-src/ext/date/lib/parse_date.re
Удачи
По моему опыту strtotime () может принимать все, что даже отдаленно выглядит как дата. Лучший способ выяснить его границы – создать тестовый скрипт и подключить значения и посмотреть, что делает и не работает.
$input = "Apr 10th"; print(date('Ym-d', strtotime($input)));
Просто продолжайте изменять переменную $ input и наблюдайте за результатами.
В принципе, все, что датирует создание strtotime, будет анализироваться. За одним исключением у него есть проблемы с форматированием не в американском стиле. Поэтому сохраните формат месяца в формате «День-Год-Год».