DateTime::createFromFormat
date_create_from_format
(PHP 5 >= 5.3.0, PHP 7)
DateTime::createFromFormat -- date_create_from_format — Создает и возвращает экземпляр класса DateTime, соответствующий заданному формату
Описание
Объектно-ориентированный стиль
$format
, string $time
[, DateTimeZone $timezone
] )Процедурный стиль
Создает и возвращает экземпляр класса DateTime, соответствующий заданному формату.
Список параметров
-
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 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
содержит символ !, то значения полей, не заданных в строке формата (равно как и значения полей слева от !) будут установлены в соответствии со значениями полей начала Эпохи 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
в случае возникновения ошибки.
Примеры
Пример #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
Смотрите также
- DateTime::__construct() - Конструктор класса DateTime
- DateTime::getLastErrors() - Возвращает предупреждения и ошибки
- checkdate() - Проверяет корректность даты по григорианскому календарю
- strptime() - Разбирает строку даты/времени сгенерированную функцией strftime
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Расширения для работы с датой и временем
- Дата и Время
- DateTime::add
- Функция DateTime::__construct() - Конструктор класса DateTime
- Функция DateTime::createFromFormat() - Создает и возвращает экземпляр класса DateTime, соответствующий заданному формату
- Функция DateTime::getLastErrors() - Возвращает предупреждения и ошибки
- Функция DateTime::modify() - Изменение временной метки
- Функция DateTime::__set_state() - Обработчик __set_state
- Функция DateTime::setDate() - Установка даты
- Функция DateTime::setISODate() - Установка ISO даты
- Функция DateTime::setTime() - Установка времени
- Функция DateTime::setTimestamp() - Устанавливает дату и время, основываясь на метке времени Unix
- Функция DateTime::setTimezone() - Установка временной зоны для объекта класса DateTime
- DateTime::sub
Коментарии
In the following code:
$t = microtime(true);
$now = DateTime::createFromFormat('U.u', $t);
$now = $now->format("H:i:s.v");
Trying to format() will return a fatal error if microtime(true) just so happened to return a float with all zeros as decimals. This is because DateTime::createFromFormat('U.u', $aFloatWithAllZeros) returns false.
Workaround (the while loop is for testing if the solution works):
$t = microtime(true);
$now = DateTime::createFromFormat('U.u', $t);
while (!is_bool($now)) {//for testing solution
$t = microtime(true);
$now = DateTime::createFromFormat('U.u', $t);
}
if (is_bool($now)) {//the problem
$now = DateTime::createFromFormat('U', $t);//the solution
}
$now = $now->format("H:i:s.v");
An easiest way to avoid error when microtime returns a non decimal float is to cast its result as a float using sprintf :
$t = microtime(true);
$now = DateTime::createFromFormat('U.u', sprintf('%f', $t));
$now = $now->format("H:i:s.v");