DateTime::createFromFormat
date_create_from_format
(PHP 5 >= 5.3.0, PHP 7)
DateTime::createFromFormat -- date_create_from_format — Разбирает строку с датой согласно указанному формату
Описание
Объектно-ориентированный стиль
$format
, string $datetime
, DateTimeZone|null $timezone = null
) : DateTime|falseПроцедурный стиль
$format
, string $datetime
, DateTimeZone|null $timezone = null
) : DateTime|false
Возвращает новый объект DateTime, представляющий дату и время, заданные строкой datetime,
которая была отформатирована в указанном format.
Список параметров
-
format -
Формат даты и времени в виде строки (string), которому соответствует значение второго аргумента функции. Список вариантов форматирования представлен ниже. В большинстве случаев, при форматировании используются те же символы, что и в функции date().
Список возможных символов для составления строки formatСимвол в строке formatОписание Возможные значения День --- --- dиjДень месяца, 2 цифры с нулем в начале или без него От 01до31либо от1до31DиlТекстовое представление дня месяца От MonдоSunлибо отSundayдоSaturdaySСуффикс для числа в английской нумерации, 2 буквы. Эти буквы будут пропущены при разборе строки. st,nd,rdилиth.zНомер дня с начала года (начиная с нуля) C 0по365Месяц --- --- FиMТекстовое представление месяца, например January или Sept С JanuaryпоDecemberлибо сJanпоDecmиnЧисловое представление месяца с первым нулем или без него С 01по12либо с1по12Год --- --- YПолное числовое представление года, 4 цифры Примеры: 1999или2003y2 цифры в представлении года (в диапазоне 1970-2069 включительно) Примеры: 99или03(будет расшифровано как1999и2003соответственно)Время --- --- aиAДо полудня и После полудня amилиpmgиh12-ти часовой формат времени с первым нулем или без него С 1по12либо с01по12GиH24-х часовой формат времени с нулем в начале или без него С 0по23или с00по23iМинуты с нулем в начале С 00по59sСекунды с нулем в начале От 00до59vМиллисекунды (до 3 цифр) Примеры: 12,345uМикросекунды (до 6 цифр) Примеры: 45,654321Временная зона --- --- e,O,PиTИдентификатор временной зоны, либо разница в часах относительно UTC, либо разница относительно UTC с двоеточием между часами и минутами, либо аббревиатура временной зоны Примеры: UTC,GMT,Atlantic/Azoresили+0200или+02:00илиEST,MDTДата/Время полностью --- --- UКоличество секунд с начала Эпохи Unix (January 1 1970 00:00:00 GMT) Пример: 1292177455Пробел и Разделители --- --- (пробел)Один пробел или один отступ табуляции Пример: #Один из следующих символов: ;,:,/,.,,,-,(или)Пример: /;,:,/,.,,,-,(или)Символ разделитель. Пример: -?Один случайный (любой) символ Пример: ^(Будьте внимательны: в UTF-8 кодировке вам может потребоваться более одного?, так как там один символ может занимать более одного байта. В таких случаях может помочь использование*.*Любое количество любых символов до следующего разделителя Пример: *вY-*-dдля строки2009-aWord-08будет соответствоватьaWord!Приводит значения всех полей (год, месяц, день, час, минута, секунда, временная зона) ко времени начала Эпохи Unix. Без !все поля будут соответствовать текущему времени.|Приводит значения незаданных полей (год, месяц, день, час, минута, секунда, временная зона) ко времени начала Эпохи Unix. Y-m-d|установит год, месяц и день в соответствии с данными в строке, а часы, минуты и секунды установит в 0.+Если задан этот спецификатор, данные, завершающие строку (нуль байт например) не будут вызывать ошибку, только предупреждение Используйте DateTime::getLastErrors() для определения, были ли в строке завершающие символы. Наличие в строке формата нераспознаваемых символов, отсутствующих в списке выше, приведет к ошибке разбора строки. В этом случае сообщение об ошибке будет добавлено в возвращаемую структуру. Получить это сообщение можно с помощью функции DateTime::getLastErrors().
Для вставки в
formatбуквенного символа, вы должны экранировать его с помощью обратного слеша(\).Если
formatне содержит символ!, то значения полей, не заданных в строке формата, будут установлены в соответствии с текущим временем.Если
formatсодержит символ!, то значения полей, не заданных в строке формата (равно как и значения полей слева от!) будут установлены в соответствии со значениями полей начала Эпохи Unix.Начало эпохи Unix 1970-01-01 00:00:00 UTC.
-
datetime -
Строка, представляющая время.
-
timezone -
Объект класса DateTimeZone, представляющий ожидаемую временную зону.
Если
timezoneне указан илиnullиdatetimeне содержит временную зону, то будет использована текущая временная зона.Замечание:
Параметр
timezoneи текущая временная зона будут проигнорированы, если параметрdatetimeтакже содержит метку времени UNIX (то есть timestamp вида946684800) или же указанную временную зону (то есть2010-01-28T15:00:00+02:00).
Возвращаемые значения
Возвращает созданный экземпляр класса DateTime или false в случае возникновения ошибки.
Список изменений
| Версия | Описание |
|---|---|
| 7.3.0 |
Для format добавлен спецификатор v.
|
Примеры
Пример #1 Пример использования DateTime::createFromFormat()
Объектно-ориентированный стиль
<?php
$date = DateTime::createFromFormat('j-M-Y', '15-Feb-2009');
echo $date->format('Y-m-d');
?>
Процедурный стиль
<?php
$date = date_create_from_format('j-M-Y', '15-Feb-2009');
echo date_format($date, 'Y-m-d');
?>
Результат выполнения данных примеров:
2009-02-15
Пример #2 Хитрости при использовании DateTime::createFromFormat()
<?php
echo 'Текущее время: ' . date('Y-m-d H:i:s') . "\n";
$format = 'Y-m-d';
$date = DateTime::createFromFormat($format, '2009-02-15');
echo "Формат: $format; " . $date->format('Y-m-d H:i:s') . "\n";
$format = 'Y-m-d H:i:s';
$date = DateTime::createFromFormat($format, '2009-02-15 15:16:17');
echo "Формат: $format; " . $date->format('Y-m-d H:i:s') . "\n";
$format = 'Y-m-!d H:i:s';
$date = DateTime::createFromFormat($format, '2009-02-15 15:16:17');
echo "Формат: $format; " . $date->format('Y-m-d H:i:s') . "\n";
$format = '!d';
$date = DateTime::createFromFormat($format, '15');
echo "Формат: $format; " . $date->format('Y-m-d H:i:s') . "\n";
?>
Результатом выполнения данного примера будет что-то подобное:
Текущее время: 2010-04-23 10:29:35 Формат: Y-m-d; 2009-02-15 10:29:35 Формат: Y-m-d H:i:s; 2009-02-15 15:16:17 Формат: Y-m-!d H:i:s; 1970-01-15 15:16:17 Формат: !d; 1970-01-15 00:00:00
Пример #3 Формат строки с буквенными символами
<?php
echo DateTime::createFromFormat('H\h i\m s\s','23h 15m 03s')->format('H:i:s');
?>
Результатом выполнения данного примера будет что-то подобное:
23:15:03
Смотрите также
- DateTime::__construct() - Конструктор класса DateTime
- DateTime::getLastErrors() - Возвращает предупреждения и ошибки
- checkdate() - Проверяет корректность даты по григорианскому календарю
- strptime() - Разбирает строку даты/времени, сгенерированную функцией strftime