Функции Язык программирования PHP

strtotime

(PHP 3>= 3.0.12, PHP 4)

strtotime - разбирает английское текстовое описание datetime в UNIX timestamp.

Описание

int strtotime (string time [, int now])

Функция ожидает строку, содержащую английский формат даты, и пытается разобрать этот формат в UNIX timestamp относительно timestamp, заданного в параметре now, или относительно текущего времени, если ничего не задано. При неудаче возвращает -1.

Поскольку strtotime() ведёт себя в соответствии с GNU-синтаксисом даты, просмотрите страницу GNU-учебника Date Input Formats. Там описан правильный синтаксис параметра time.

Пример 1. strtotime()
echo strtotime ("now"), "\n"; echo strtotime ("10 September 2000"), "\n"; 
echo strtotime ("+1 day"), "\n"; echo strtotime ("+1 week"), "\n"; echo strtotime 
("+1 week 2 days 4 hours 2 seconds"), "\n"; echo strtotime ("next Thursday"), 
"\n"; echo strtotime ("last Monday"), "\n";
Пример 2. Проверка при неудаче
$str = 'Not Good'; if (($timestamp = strtotime($str)) === -1) { echo 
"The string ($str) is bogus"; } else { echo "$str == ". date('l dS of F Y h:i:s 
A',$timestamp); }

Примечание: диапазон правильных значений timestamp обычно: от Fri, 13 Dec 1901 20:45:54 GMT до Tue, 19 Jan 2038 03:14:07 GMT. (Это даты, соответствующие минимальным и максимальным значениям для 32-битного знакового integer.)


Назад Оглавление Вперёд
strftime Вверх time

Рекурсивные патэрны

Рассмотрим проблему совпадения строки в скобках, когда допускается неограниченное вложение скобок. Без использования рекурсии лучшее, что можно сделать, это использовать патэрн, который совпадает на некоторую фиксированную глубину вложения. Невозможно обработать вложения на произвольно большую глубину. В Perl 5.6 имеется экспериментальная возможность, позволяющая (помимо прочего) выполнять рекурсию регулярных выражений. Специальный элемент (?R) предоставлен для этого специфического case/варианта рекурсии.
PCRE-патэрн разрешает проблему скобок (предполагая, что опция PCRE_EXTENDED установлена так, что пробел игнорируется):

\( ( (?>[^()]+) | (?R) )* \)

Вначале он совпадает с открывающей скобкой. Затем - с любым количеством подстрок, которые могут быть либо последовательностями не-скобок, либо рекурсивным совпадением самого патэрна (т.е. корректно заключённой в скобки подстрокой). Наконец, идёт закрывающая скобка.

Этот особый пример патэрна содержит вложенное бесконечное повторение, и, таким образом, использование однократного субпатэрна для совпадения со строками из не-скобок очень важно, когда  патэрн применяется к строкам, которые не совпадают. Например, если его применить к

(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa()

то он быстро даст "нет совпадений". Однако, если однократный/once-only субпатэрн не используется, поиск совпадения будет продолжаться длительное время, так как есть много различных способов, которыми повторения + и * могут кроить строку-субъект, и все они должны быть проверены, прежде чем будет выдано сообщение о неудаче поиска.