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
до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
v
Миллисекунды (до 3 цифр) Примеры: 12
,345
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.
-
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