(PHP 5 >= 5.3.0, PHP 7)
DateTime::createFromFormat -- date_create_from_format — Разбирает строку с датой согласно указанному формату
Объектно-ориентированный стиль
$format
, string $time
[, DateTimeZone $timezone
] ) : DateTimeПроцедурный стиль
Создает и возвращает экземпляр класса DateTime, соответствующий заданному формату.
format
Формат даты и времени в виде строки (string), которому соответствует значение второго аргумента функции. Список вариантов форматирования представлен ниже. В большинстве случаев, при форматировании используются те же символы, что и в функции date().
Символ в строке format |
Описание | Возможные значения |
---|---|---|
День | --- | --- |
d и j | День месяца, 2 цифры с нулем в начале или без него | От 01 до 31 либо от 1 до 31 |
D и l | Текстовое представление дня месяца | От Mon до Sun либо от Sunday до Saturday |
S | Суффикс для числа в английской нумерации, 2 буквы. Эти буквы будут пропущены при разборе строки. | st, nd, rd или th. |
z | Номер дня с начала года (начиная с нуля) | C 0 по 365 |
Месяц | --- | --- |
F и M | Текстовое представление месяца, например January или Sept | С January по December либо с Jan по Dec |
m и n | Числовое представление месяца с первым нулем или без него | С 01 по 12 либо с 1 по 12 |
Год | --- | --- |
Y | Полное числовое представление года, 4 цифры | Примеры: 1999 или 2003 |
y | 2 цифры в представлении года (в диапазоне 1970-2069 включительно) | Примеры: 99 или 03 (будет расшифровано как 1999 и 2003 соответственно) |
Время | --- | --- |
a и A | До полудня и После полудня | am или pm |
g и h | 12-ти часовой формат времени с первым нулем или без него | С 1 по 12 либо с 01 по 12 |
G и H | 24-х часовой формат времени с нулем в начале или без него | С 0 по 23 или с 00 по 23 |
i | Минуты с нулем в начале | С 00 по 59 |
s | Секунды с нулем в начале | От 00 до 59 |
u | Микросекунды (до 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.
time
Строка, представляющая время.
timezone
Объект класса DateTimeZone, представляющий ожидаемую временную зону.
Если timezone
не указан и
time
не содержит временную зону,
то будет использована текущая временная зона.
Замечание:
Параметр
timezone
и текущая временная зона будут проигнорированы, если параметрtime
также содержит метку времени UNIX (то есть timestamp вида 946684800) или же указанную временную зону (то есть 2010-01-28T15:00:00+02:00).
Возвращает созданный экземпляр класса DateTime или FALSE
в случае возникновения ошибки.
Версия | Описание |
---|---|
5.3.9 |
Для format добавлен спецификатор +.
|
Пример #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