Since the description and examples don't exactly match for the timezone row, I want to clarify exactly which format each character outputs.
`e` outputs the timezone identifier, e.g. `America/New_York` or `Asia/Gaza`
`O` outputs the difference to UTC in hours, e.g. `-0500` or `+0200`
`P` outputs difference to UTC with a colon between hours and minutes, e.g. `-05:00` or `+02:00`
`T` outputs the timezone abbreviation, e.g. `EST` or `EET`DateTimeImmutable::createFromFormat
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
DateTimeImmutable::createFromFormat
Референца за `datetimeimmutable.createfromformat.php` со подобрена типографија и навигација.
DateTimeImmutable::createFromFormat
date_create_immutable_from_format
Распакување на вгнездени низи
DateTimeImmutable::createFromFormat -- date_create_immutable_from_format — Парсира стринг за време според наведениот формат
= NULL
Напиши целосна ознака на елемент
$format, string $datetime, ?DateTimeZone $timezone = null): DateTimeImmutable|falseПроцедурален стил
$format, string $datetime, ?DateTimeZone $timezone = null): DateTimeImmutable|false
Враќа нов DateTimeImmutable објект што го претставува датумот и времето наведени од
datetime стринг, кој беше форматиран во дадениот
format.
Параметри
format-
Форматот што е предаден string треба да биде. Погледнете ги опциите за форматирање подолу. Во повеќето случаи, истите букви како за date() може да се користи.
Сите полиња се иницијализираат со тековниот датум/време. Во повеќето случаи, ќе сакате да ги ресетирате на „нула“ (Unix епохата
1970-01-01 00:00:00 UTC). Тоа го правите со вклучување на!карактер како прв карактер во вашиотformat, или|како ваш последен. Ве молиме, погледнете ја документацијата за секој карактер подолу за повеќе информации.Форматот се анализира од лево надесно, што значи дека во некои ситуации редоследот по кој се присутни карактерите на форматот влијае на резултатот. Во случај на
z(ден од годината), потребно е веќе да е анализирана година, на пример прекуYorycharacters.Буквите што се користат за анализирање броеви дозволуваат широк спектар на вредности, надвор од она што би било логичкиот опсег. На пример,
d(ден од месецот) прифаќа вредности во опсег од00to99. Единственото ограничување е на количината на цифри. Механизмот за прелевање на парсерот за датум/време се користи кога се даваат вредности надвор од опсегот. Примерите подолу покажуваат дел од ова однесување.Ова исто така значи дека податоците анализирани за буква од формат се алчни и ќе читаат до количината на цифри што нејзиниот формат ја дозволува. Тоа потоа може да значи дека нема доволно знаци во
datetimeниза за следните карактери на формат. Пример на оваа страница исто така ја илустрира овој проблем.Следниве знаци се препознаваат во formatнизата за параметриformatcharacter= NULL Примерни вредности што можат да се анализираат Ден --- --- dandjДен од месецот, 2 цифри со или без водечки нули 01to31or1to31. (Прифатени се 2-цифрени броеви повисоки од бројот на денови во месецот, во кој случај тие ќе предизвикаат прелевање на месецот. На пример, користење 33 со јануари, значи 2-ри февруари)DandlТекстуална репрезентација на ден MonthroughSunorSundaythroughSaturday. Ако даденото име на ден е различно од името на ден што припаѓа на анализиран (или стандарден) датум е различно, тогаш се случува прелевање на next датум со даденото име на ден. Погледнете ги примерите подолу за објаснување.SEnglish ordinal suffix for the day of the month, 2 characters. It's ignored while processing. st,nd,rdorth.zНаставката за редниот број на денот во месецот, 2 знаци. Се игнорира при обработката. Yory.0through365Денот во годината (почнувајќи од 0); мора да му претходи(за 46-тата недела од годината што започнува со Понеделник) --- --- FandM. (Прифатени се 3-цифрени броеви поголеми од броевите во една година, во тој случај годината ќе претече. На пример, користењето 366 со 2022, значи 2 јануари 2023 година) JanuarythroughDecemberorJanthroughDecmandnТекстуална претстава на месец, како јануари или септември 01through12or1through12Нумеричка претстава на месец, со или без водечки нули(за Декември) --- --- Xandx. (Прифатени се 2-цифрени броеви поголеми од 12, во тој случај годината ќе претече. На пример, користењето 13 значи јануари во следната година) до Целосна нумеричка претстава на година, +or-Примери: 0055,787,1999,-2003,+10191Y. (Прифатени се 2-цифрени броеви поголеми од 12, во тој случај годината ќе претече. На пример, користењето 13 значи јануари во следната година) до 19 цифри, опционално претходени од Примери: 254 цифри0025),787,1999,2003y(исто како Примери: 99or03Двоцифрена претстава на година (за која се претпоставува дека е во опсег 1970-2069, вклучително)1999and2003(што ќе се толкува какоВреме --- --- aandA, соодветно) amorpmgandhПредпладне и попладне 1through12or01through1212-часовен формат на час со или без водечка нула14means02(Прифатени се 2-цифрени броеви поголеми од 12, во тој случај денот ќе претече. На пример, користењетоGandHво следниот AM/PM период) 0through23or00through2324-часовен формат на час со или без водечки нули26means02:00(Прифатени се 2-цифрени броеви поголеми од 24, во тој случај денот ќе претече. На пример, користењетоiМинути со водечки нули 00to59. (двоцифрени броеви повисоки од 59 се прифаќаат, во кој случај ќе предизвикаат прелевање на часот. На пример, користејќи66means:06следниот час)sСекунди, со водечки нули 00through59(двоцифрени броеви повисоки од 59 се прифаќаат, во кој случај ќе предизвикаат прелевање на минутата. На пример, користејќи90means:30следната минута)vФракција во милисекунди (до три цифри) Пример: 12(0.12секунди),345(0.345секунди)uФракција во микросекунди (до шест цифри) Пример: 45(0.45секунди),654321(0.654321секунди)Временска зона --- --- e,O,p,PandTИдентификатор на временска зона, или разлика до UTC во часови, или разлика до UTC со двоеточие помеѓу часови и минути, или кратенка на временска зона Примери: UTC,GMT,Atlantic/Azoresor+0200or+02:00orEST,MDTЦелосен датум/време --- --- UСекунди од Unix епохата (1 јануари 1970 00:00:00 GMT) Пример: 1292177455Празни места и Сепаратори --- --- FlagsНула или повеќе празни места, табулатори, NBSP (U+A0), или NNBSP (U+202F) знаци Пример: "\t"," "#Еден од следниве симболи за разделување: ;,:,/,.,,,-,(or)Пример: /;,:,/,.,,,-,(or)Наведениот знак. Пример: -?Случаен бајт Пример: ^(Имајте предвид дека за UTF-8 знаци можеби ќе ви требаат повеќе од еден?. Во овој случај, користејќи*веројатно е она што го сакате наместо тоа)*Случајни бајти до следниот сепаратор или цифра Пример: *inY-*-dсо низата2009-aWord-08ќе се совпаднеaWord!Ги ресетира сите полиња (година, месец, ден, час, минута, секунда, фракција и информации за временската зона) на вредности слични на нула ( 0за час, минута, секунда и фракција,1за месец и ден,1970за година и стандардна временска зона)Без !,сите полиња ќе бидат поставени на тековната дата и време.|Ги ресетира сите полиња (година, месец, ден, час, минута, секунда, фракција и информации за временската зона) на вредности слични на нула ако тие сè уште не се анализирани Y-m-d|ќе ја постави годината, месецот и денот на информациите пронајдени во низата за анализа, и ќе ги постави часот, минутата и секундата на 0.+Ако овој спецификатор на формат е присутен, заостанатите податоци во низата нема да предизвикаат грешка, туку предупредување. од PHP 8.0.0. Силно се обесхрабрува потпирањето на оваа функција. Превртените датуми може да се откријат со проверка за предупредувања користејќи за да дознаете дали имаше заостанати податоци. Непрепознаените знаци во низата за формат ќе предизвикаат неуспех при анализата и порака за грешка ќе биде додадена во вратената структура. Можете да ги прашате пораките за грешка со Превртените датуми може да се откријат со проверка за предупредувања користејќи.
За да вклучите буквални знаци во
format, мора да ги избегнете со обратна коса црта (\).Враќа
formatне го содржи знакот!тогаш делови од генерираната дата/време што не се специфицирани воformatќе бидат поставени на тековното системско време.Враќа
formatго содржи знакот!, тогаш делови од генерираната дата/време што не се обезбедени воformat, како и вредностите од левата страна на!, ќе бидат поставени на соодветните вредности од Unix епохата.Ако се анализира кој било време, тогаш сите други полиња поврзани со времето се поставуваат на "0", освен ако не се анализираат.
Unix епохата е 1970-01-01 00:00:00 UTC.
datetime-
Низа што го претставува времето.
timezone-
А DateTimeZone објект што го претставува посакуваното временско појас.
Враќа
timezoneе изоставен илиnullanddatetimeне содржи временска зона, ќе се користи тековната временска зона.Забелешка:
На
timezone, ќе се користи тековниот временски појас.datetimeпараметар или содржи UNIX временски печат (на пр.946684800параметарот е или UNIX временски печат (на пр.2010-01-28T15:00:00+02:00).
Вратени вредности
Враќа нова инстанца DateTimeImmutable или false при неуспех.
Errors/Exceptions
Овој метод фрла ValueError кога
datetime содржи NULL бајти.
Дневник на промени
| Верзија | = NULL |
|---|---|
| 8.2.9 |
На (простор) спецификаторот сега поддржува и NBSP (U+A0) и NNBSP (U+202F) знаци.
|
| 8.2.0 |
На X and x
format додадени се спецификатори.
|
| 8.0.21, 8.1.8, 8.2.0 |
список на имиња на класи, ValueError кога NULL бајти се проследени во datetime, што претходно беше тивко игнорирано.
|
| 7.3.0 |
На v format додаден е спецификатор.
|
Примери
Пример #1 низа е невалидна. example
Напиши целосна ознака на елемент
<?php
$date = DateTimeImmutable::createFromFormat('j-M-Y', '15-Feb-2009');
echo $date->format('Y-m-d');Пример #2 Користење на претходно дефинирани константи за формат со низа е невалидна.
Напиши целосна ознака на елемент
<?php
$date = DateTimeImmutable::createFromFormat(
DateTimeInterface::ISO8601,
'2004-02-12T15:19:21+00:00'
);
echo $date->format('c e') . "\n";
$date = DateTimeImmutable::createFromFormat(
DateTimeInterface::RFC3339_EXTENDED,
'2013-10-14T09:00:00.000+02:00'
);
echo $date->format('c e') . "\n";На константи за форматирање како што се користат во овој пример се состојат од низа знаци за formatting a DateTimeImmutable објект. Во повеќето случаи, овие букви се совпаѓаат со истите елементи на информации за датум/време како оние дефинирани во parameters дел погоре, но тие имаат тенденција да бидат поблаги.
Пример #3 Комплексности на низа е невалидна.
<?php
echo 'Current time: ' . date('Y-m-d H:i:s') . "\n";
$format = 'Y-m-d';
$date = DateTimeImmutable::createFromFormat($format, '2009-02-15');
echo "Format: $format; " . $date->format('Y-m-d H:i:s') . "\n";
$format = 'Y-m-d H:i:s';
$date = DateTimeImmutable::createFromFormat($format, '2009-02-15 15:16:17');
echo "Format: $format; " . $date->format('Y-m-d H:i:s') . "\n";
$format = 'Y-m-!d H:i:s';
$date = DateTimeImmutable::createFromFormat($format, '2009-02-15 15:16:17');
echo "Format: $format; " . $date->format('Y-m-d H:i:s') . "\n";
$format = '!d';
$date = DateTimeImmutable::createFromFormat($format, '15');
echo "Format: $format; " . $date->format('Y-m-d H:i:s') . "\n";
$format = 'i';
$date = DateTimeImmutable::createFromFormat($format, '15');
echo "Format: $format; " . $date->format('Y-m-d H:i:s') . "\n";Горниот пример ќе прикаже нешто слично на:
Current time: 2022-06-02 15:50:46 Format: Y-m-d; 2009-02-15 15:50:46 Format: Y-m-d H:i:s; 2009-02-15 15:16:17 Format: Y-m-!d H:i:s; 1970-01-15 15:16:17 Format: !d; 1970-01-15 00:00:00 Format: i; 2022-06-02 00:15:00
Пример #4 Низа за формат со буквални знаци
<?php
echo DateTimeImmutable::createFromFormat('H\h i\m s\s','23h 15m 03s')->format('H:i:s');Горниот пример ќе прикаже нешто слично на:
23:15:03
Пример #5 Прелевање однесување
<?php
echo DateTimeImmutable::createFromFormat('Y-m-d H:i:s', '2021-17-35 16:60:97')->format(DateTimeImmutable::RFC2822);Горниот пример ќе прикаже нешто слично на:
Sat, 04 Jun 2022 17:01:37 +0000
Иако резултатот изгледа чудно, тој е точен, бидејќи се случуваат следниве прелевања:
-
97секунди прелеваат во1минута, оставајќи37seconds. -
61минути прелеваат во1час, оставајќи1minutes. -
35денови прелеваат во1месец, оставајќи4денови. Количината на преостанати денови зависи од месецот, бидејќи не секој месец има ист број на денови. -
18месеци прелеваат во1година, оставајќи6months.
Пример #6 Однесување при прелевање на името на денот
<?php
$d = DateTime::createFromFormat(DateTimeInterface::RFC1123, 'Mon, 3 Aug 2020 25:00:00 +0000');
echo $d->format(DateTime::RFC1123), "\n";Горниот пример ќе прикаже нешто слично на:
Mon, 10 Aug 2020 01:00:00 +0000
Иако резултатот изгледа чудно, тој е точен, бидејќи се случуваат следниве прелевања:
-
3 Aug 2020 25:00:00прелева во(Tue) 4 Aug 2020 01:00. -
Monсе применува, што го поместува датумот наMon, 10 Aug 2020 01:00:00. Објаснувањето на релативните клучни зборови какоMonе објаснето во делот за релативни формати.
За да откриете прелевање во датумите, можете да користите Превртените датуми може да се откријат со проверка за предупредувања користејќи, што ќе вклучи предупредување ако се случило прелевање.
Пример #7 Откривање преполнети датуми
<?php
$d = DateTimeImmutable::createFromFormat('Y-m-d H:i:s', '2021-17-35 16:60:97');
echo $d->format(DateTimeImmutable::RFC2822), "\n\n";
var_dump(DateTimeImmutable::getLastErrors());Горниот пример ќе прикаже нешто слично на:
Sat, 04 Jun 2022 17:01:37 +0000
array(4) {
'warning_count' =>
int(2)
'warnings' =>
array(1) {
[19] =>
string(27) "The parsed date was invalid"
}
'error_count' =>
int(0)
'errors' =>
array(0) {
}
}
Пример #8 Поведение на грабливо парсирање
<?php
print_r(date_parse_from_format('Gis', '60101'));Горниот пример ќе прикаже нешто слично на:
Array
(
[year] =>
[month] =>
[day] =>
[hour] => 60
[minute] => 10
[second] => 0
[fraction] => 0
[warning_count] => 1
[warnings] => Array
(
[5] => The parsed time was invalid
)
[error_count] => 1
[errors] => Array
(
[4] => A two digit second could not be found
)
[is_localtime] =>
)
На G форматот е да се парсираат 24-часовни часови, со или без водечка нула. Ова бара парсирање на 1 или 2 цифри. Бидејќи има две следни цифри, грабливо ги чита како 60.
Следното i and s форматните карактери бараат две цифри. Ова значи дека 10
се предава како минута (i), и дека тогаш нема доволно цифри што остануваат за парсирање како секунда (s).
На errors низата го покажува овој проблем.
Дополнително, час од 60 е надвор од опсегот
0-24, што предизвикува
warnings низата да вклучува предупредување дека времето е невалидно.
Види Исто така
- комбинирани формати - Враќа нов DateTimeImmutable објект
- Превртените датуми може да се откријат со проверка за предупредувања користејќи - Враќа предупредувања и грешки
- checkdate() - Валидирај грегоријански датум
- strptime() - Парсирај време/датум генериран со strftime
Белешки од корисници 3 белешки
To clarify, g/G are 12/24 hour time without a leading 0, and h/H are 12/24 hour time with a leading zero, as described here:
https://www.php.net/manual/en/datetime.format.phpIf you are not happy with wide range of conversions and repairs this method is making for you, or just want to check that date is really same as input:
```
$datetime = \DateTimeImmutable::createFromFormat('Y-m-d G:i:s', $userDateTimeInput);
if ($datetime && $datetime->format('Y-m-d G:i:s') === $userDateTimeInput) {
// $datetime is not false and we have a correct date in correct format from user
}
```