PHP date_create_from_format Function: Syntax and Examples
If you need to create a PHP date object from a string with a non-standard format, you can use the date_create_from_format function. This function parses a date string according to a specified format and returns a DateTime object that represents the parsed date.
Syntax
The syntax of the date_create_from_format function is:
date_create_from_format ( string $format , string $time [, DateTimeZone $timezone ] ) : DateTime|false
The format parameter specifies the format of the date string, using the same format characters as the date function. For example, the format string «Y-m-d H:i:s» matches a date string like «2023-03-02 17:30:45» .
The time parameter specifies the date string to parse.
The optional timezone parameter specifies the timezone of the parsed date. If not specified, the default timezone set by the date_default_timezone_set function will be used.
The function returns a DateTime object that represents the parsed date, or false if the date string could not be parsed.
Examples
Here are some examples of using the date_create_from_format function:
$date = date_create_from_format('Y-m-d H:i:s', '2023-03-02 17:30:45'); echo $date->format('Y-m-d H:i:s'); // Output: 2023-03-02 17:30:45
In this example, the date_create_from_format function parses the date string «2023-03-02 17:30:45» using the format string «Y-m-d H:i:s» , and returns a DateTime object that represents the date. The format method is used to display the date in the same format as the input string.
$date = date_create_from_format('j-M-Y', '15-Feb-2023'); echo $date->format('Y-m-d'); // Output: 2023-02-15
In this example, the date_create_from_format function parses the date string «15-Feb-2023» using the format string «j-M-Y» , and returns a DateTime object that represents the date. The format method is used to display the date in the format «Y-m-d» , which is different from the input string.
Comparison with Other Date Functions
The date_create_from_format function is similar to the strtotime function, which also parses a date string according to a specified format. However, strtotime returns a Unix timestamp, which is an integer representing the number of seconds since January 1 1970 00:00:00 UTC, whereas date_create_from_format returns a DateTime object.
The date_parse_from_format function is another function that can parse a date string according to a specified format. However, date_parse_from_format returns an array that contains the components of the parsed date, such as year, month, day, hour, minute, and second, whereas date_create_from_format returns a DateTime object that encapsulates the parsed date.
Conclusion
In summary, the date_create_from_format function is a useful PHP function that can parse a date string according to a specified format and return a DateTime object that represents the parsed date. By using this function, you can convert non-standard date strings into standard date objects that can be manipulated and formatted using other PHP date functions.
date_create_from_format
Создает и возвращает экземпляр класса DateTime, соответствующий заданному формату.
Список параметров
Формат даты и времени в виде строки (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 цифры в представлении года | Примеры: 99 или 03 |
Время | — | — |
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.
Строка, представляющая время.
Объект класса DateTimeZone, представляющий ожидаемую временную зону.
Если timezone не указан и time не содержит веремнную зону, то будет использована текущая временная зона.
Замечание:
Параметр timezone и текущая временная зона будут проигнорированы, если параметр time также содержит метку времени UNIX (т.е. timestamp вида 946684800) или же указанную временную зону (т.е. 2010-01-28T15:00:00+02:00).
Возвращаемые значения
Возвращает созданный экземпляр класса DateTime или FALSE в случае возникновения ошибки.
Примеры
Пример #1 Пример использования DateTime::createFromFormat()
$date = DateTime::createFromFormat('j-M-Y', '15-Feb-2009'); echo $date->format('Y-m-d');
$date = date_create_from_format('j-M-Y', '15-Feb-2009'); echo date_format($date, 'Y-m-d');
Результат выполнения данных примеров:
Пример #2 Хитрости при использовании DateTime::createFromFormat()
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
Описание класса datetime, примеры использования класса datetime.
PHP date_create_from_format() Function
Return a new DateTime object formatted according to the specified format:
Definition and Usage
The date_create_from_format() function returns a new DateTime object formatted according to the specified format.
Syntax
Parameter Values
- d — Day of the month; with leading zeros
- j — Day of the month; without leading zeros
- D — Day of the month (Mon — Sun)
- l — Day of the month (Monday — Sunday)
- S — English suffix for day of the month (st, nd, rd, th)
- F — Monthname (January — December)
- M — Monthname (Jan-Dec)
- m — Month (01-12)
- n — Month (1-12)
- Y — Year (e.g 2013)
- y — Year (e.g 13)
- a and A — am or pm
- g — 12 hour format without leading zeros
- G — 24 hour format without leading zeros
- h — 12 hour format with leading zeros
- H — 24 hour format with leading zeros
- i — Minutes with leading zeros
- s — Seconds with leading zeros
- u — Microseconds (up to six digits)
- e, O, P and T — Timezone identifier
- U — Seconds since Unix Epoch
- (space)
- # — One of the following separation symbol: ;. /. -,(,)
- ? — A random byte
- * — Random bytes until next separator/digit
- ! — Resets all fields to Unix Epoch
- | — Resets all fields to Unix Epoch if they have not been parsed yet
- + — If present, trailing data in the string will cause a warning, not an error