PHP.mk документација

DateTimeImmutable::createFromFormat

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

datetimeimmutable.createfromformat.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека datetimeimmutable.createfromformat.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
DateTimeImmutable::createFromFormat

Референца за `datetimeimmutable.createfromformat.php` со подобрена типографија и навигација.

datetimeimmutable.createfromformat.php

DateTimeImmutable::createFromFormat

date_create_immutable_from_format

Распакување на вгнездени низи

DateTimeImmutable::createFromFormat -- date_create_immutable_from_formatПарсира стринг за време според наведениот формат

= NULL

Напиши целосна ознака на елемент

public static DateTimeImmutable::createFromFormat(string $format, string $datetime, ?DateTimeZone $timezone = null): DateTimeImmutable|false

Процедурален стил

Враќа нов DateTimeImmutable објект што го претставува датумот и времето наведени од datetime стринг, кој беше форматиран во дадениот format.

Параметри

format

Форматот што е предаден string треба да биде. Погледнете ги опциите за форматирање подолу. Во повеќето случаи, истите букви како за date() може да се користи.

Сите полиња се иницијализираат со тековниот датум/време. Во повеќето случаи, ќе сакате да ги ресетирате на „нула“ (Unix епохата 1970-01-01 00:00:00 UTC). Тоа го правите со вклучување на ! карактер како прв карактер во вашиот format, или | како ваш последен. Ве молиме, погледнете ја документацијата за секој карактер подолу за повеќе информации.

Форматот се анализира од лево надесно, што значи дека во некои ситуации редоследот по кој се присутни карактерите на форматот влијае на резултатот. Во случај на z (ден од годината), потребно е веќе да е анализирана година, на пример преку Y or y characters.

Буквите што се користат за анализирање броеви дозволуваат широк спектар на вредности, надвор од она што би било логичкиот опсег. На пример, d (ден од месецот) прифаќа вредности во опсег од 00 to 99. Единственото ограничување е на количината на цифри. Механизмот за прелевање на парсерот за датум/време се користи кога се даваат вредности надвор од опсегот. Примерите подолу покажуваат дел од ова однесување.

Ова исто така значи дека податоците анализирани за буква од формат се алчни и ќе читаат до количината на цифри што нејзиниот формат ја дозволува. Тоа потоа може да значи дека нема доволно знаци во datetime низа за следните карактери на формат. Пример на оваа страница исто така ја илустрира овој проблем.

Следниве знаци се препознаваат во format низата за параметри
format character = NULL Примерни вредности што можат да се анализираат
Ден --- ---
d and j Ден од месецот, 2 цифри со или без водечки нули 01 to 31 or 1 to 31. (Прифатени се 2-цифрени броеви повисоки од бројот на денови во месецот, во кој случај тие ќе предизвикаат прелевање на месецот. На пример, користење 33 со јануари, значи 2-ри февруари)
D and l Текстуална репрезентација на ден Mon through Sun or Sunday through Saturday. Ако даденото име на ден е различно од името на ден што припаѓа на анализиран (или стандарден) датум е различно, тогаш се случува прелевање на next датум со даденото име на ден. Погледнете ги примерите подолу за објаснување.
S English ordinal suffix for the day of the month, 2 characters. It's ignored while processing. st, nd, rd or th.
z Наставката за редниот број на денот во месецот, 2 знаци. Се игнорира при обработката. Y or y. 0 through 365Денот во годината (почнувајќи од 0); мора да му претходи
(за 46-тата недела од годината што започнува со Понеделник) --- ---
F and M . (Прифатени се 3-цифрени броеви поголеми од броевите во една година, во тој случај годината ќе претече. На пример, користењето 366 со 2022, значи 2 јануари 2023 година) January through December or Jan through Dec
m and n Текстуална претстава на месец, како јануари или септември 01 through 12 or 1 through 12Нумеричка претстава на месец, со или без водечки нули
(за Декември) --- ---
X and x . (Прифатени се 2-цифрени броеви поголеми од 12, во тој случај годината ќе претече. На пример, користењето 13 значи јануари во следната година) до Целосна нумеричка претстава на година, + or - Примери: 0055, 787, 1999, -2003, +10191
Y . (Прифатени се 2-цифрени броеви поголеми од 12, во тој случај годината ќе претече. На пример, користењето 13 значи јануари во следната година) до 19 цифри, опционално претходени од Примери: 25 4 цифри 0025), 787, 1999, 2003
y (исто како Примери: 99 or 03 Двоцифрена претстава на година (за која се претпоставува дека е во опсег 1970-2069, вклучително) 1999 and 2003(што ќе се толкува како
Време --- ---
a and A , соодветно) am or pm
g and h Предпладне и попладне 1 through 12 or 01 through 12 12-часовен формат на час со или без водечка нула 14 means 02 (Прифатени се 2-цифрени броеви поголеми од 12, во тој случај денот ќе претече. На пример, користењето
G and H во следниот AM/PM период) 0 through 23 or 00 through 23 24-часовен формат на час со или без водечки нули 26 means 02:00 (Прифатени се 2-цифрени броеви поголеми од 24, во тој случај денот ќе претече. На пример, користењето
i Минути со водечки нули 00 to 59. (двоцифрени броеви повисоки од 59 се прифаќаат, во кој случај ќе предизвикаат прелевање на часот. На пример, користејќи 66 means :06 следниот час)
s Секунди, со водечки нули 00 through 59 (двоцифрени броеви повисоки од 59 се прифаќаат, во кој случај ќе предизвикаат прелевање на минутата. На пример, користејќи 90 means :30 следната минута)
v Фракција во милисекунди (до три цифри) Пример: 12 (0.12 секунди), 345 (0.345 секунди)
u Фракција во микросекунди (до шест цифри) Пример: 45 (0.45 секунди), 654321 (0.654321 секунди)
Временска зона --- ---
e, O, p, P and T Идентификатор на временска зона, или разлика до UTC во часови, или разлика до UTC со двоеточие помеѓу часови и минути, или кратенка на временска зона Примери: UTC, GMT, Atlantic/Azores or +0200 or +02:00 or EST, MDT
Целосен датум/време --- ---
U Секунди од Unix епохата (1 јануари 1970 00:00:00 GMT) Пример: 1292177455
Празни места и Сепаратори --- ---
Flags Нула или повеќе празни места, табулатори, NBSP (U+A0), или NNBSP (U+202F) знаци Пример: "\t", " "
# Еден од следниве симболи за разделување: ;, :, /, ., ,, -, ( or ) Пример: /
;, :, /, ., ,, -, ( or ) Наведениот знак. Пример: -
? Случаен бајт Пример: ^ (Имајте предвид дека за UTF-8 знаци можеби ќе ви требаат повеќе од еден ?. Во овој случај, користејќи * веројатно е она што го сакате наместо тоа)
* Случајни бајти до следниот сепаратор или цифра Пример: * in Y-*-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 е изоставен или null and datetime не содржи временска зона, ќе се користи тековната временска зона.

Забелешка:

На 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

Иако резултатот изгледа чудно, тој е точен, бидејќи се случуваат следниве прелевања:

  1. 97 секунди прелеваат во 1 минута, оставајќи 37 seconds.
  2. 61 минути прелеваат во 1 час, оставајќи 1 minutes.
  3. 35 денови прелеваат во 1 месец, оставајќи 4 денови. Количината на преостанати денови зависи од месецот, бидејќи не секој месец има ист број на денови.
  4. 18 месеци прелеваат во 1 година, оставајќи 6 months.

Пример #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

Иако резултатот изгледа чудно, тој е точен, бидејќи се случуваат следниве прелевања:

  1. 3 Aug 2020 25:00:00 прелева во (Tue) 4 Aug 2020 01:00.
  2. 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 низата да вклучува предупредување дека времето е невалидно.

Види Исто така

Белешки од корисници 3 белешки

Теса на AuRiseCreative точка ком
пред 2 години
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`
Енди Вокер
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.php
петар точка лабос на џимејл точка ком
пред 2 години
If 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
}
```
На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.