Cette section décrit, dans un format de type BNF, tous les formats différents
que l'analyseur de DateTimeImmutable,
DateTime, date_create_immutable(),
date_create(), date_parse(), et
strtotime() est capable de comprendre.
Les formats sont groupés par sections.
Dans la plupart des cas, les formats de sections différentes, séparé par des
caractères d'espacement blanc, des virgules ou des points, peuvent être
utilisés dans la même chaîne date/moment. Pour chaque format supporté, un ou
plusieurs exemples sont donnés ainsi qu'une description du format correspondant.
Les caractères entre guillemets simples pour les formats sont insensibles à la
casse ('t'
pourrait s'écrire t
ou
T
), les caractères écrits entre guillemets doubles, eux,
sont sensibles à la casse ("T"
et seulement T
).
Pour formatter des objets DateTimeImmutable et DateTime, veuillez vous référer à la documentation de la méthode DateTimeInterface::format().
Un ensemble de règles générales devrait être pris en compte.
false
si un des nombres et en-dehors
de la plage, et DateTimeImmutable::__construct() lance
une exception.
@1690388256
)
et des dates hebdomadaires ISO (2008-W28-3
).
Il y a une vérification additionnelle si une date invalide est fourni :
<?php
$res = date_parse("2015-09-31");
var_dump($res["warnings"]);
?>
L'exemple ci-dessus va afficher :
array(1) { [11] => string(27) "The parsed date was invalid" }
Il est déjà possible de gérer c'est cas spéciaux, mais l'utilisation de It is already possible to handle the edge cases, but then you need to use DateTimeImmutable::createFromFormat() est requis en fournissant le format voulu.
<?php
$res = DateTimeImmutable::createFromFormat("Y-m-d", "2015-09-34");
var_dump($res);
L'exemple ci-dessus va afficher :
object(DateTimeImmutable)#1 (3) { ["date"] => string(26) "2015-10-04 17:24:43.000000" ["timezone_type"] => int(3) ["timezone"] => string(13) "Europe/London" }
Cette page décrit les différents formats dans une syntaxe de type BNF que les analyseurs de DateTimeImmutable, DateTime, date_create(), date_create_immutable(), et strtotime() comprennent.
Pour formatter des objets DateTimeImmutable et DateTime, veuillez vous référer à la documentation de la méthode DateTimeInterface::format().
Description | Formats | Exemples |
---|---|---|
frac |
. [0-9]+ | ".21342", ".85" |
hh |
"0"?[1-9] | "1"[0-2] | "04", "7", "12" |
HH |
[01][0-9] | "2"[0-4] | "04", "07", "19" |
méridien |
[AaPp] .? [Mm] .? [\0\t ] | "A.m.", "pM", "am." |
MM |
[0-5][0-9] | "00", "12", "59" |
II |
[0-5][0-9] | "00", "12", "59" |
espace |
[ \t] | |
tz |
"("? [A-Za-z]{1,6} ")"? | [A-Z][a-z]+([_/][A-Z][a-z]+)+ | "CEST", "Europe/Amsterdam", "America/Indiana/Knox" |
tzcorrection |
"GMT"? [+-] hh ":"? MM ? |
"+0400", "GMT-07:00", "-07:00" |
Description | Format | Exemples |
---|---|---|
Heures seules, avec méridien | hh espace ? méridien |
"4 am", "5PM" |
Heures et minutes, avec méridien | hh [.:] MM space ? méridien |
"4:08 am", "7:19P.M." |
Heures, minutes et secondes avec méridien | hh [.:] MM [.:] II espace ? méridien |
"4:08:37 am", "7:19:19P.M." |
MS SQL (Heures, minutes, secondes et fraction avec méridien) | hh ":" MM ":" II [.:] [0-9]+ meridian |
"4:08:39:12313am" |
Description | Format | Exemples |
---|---|---|
Heures et minutes | 't'? HH [.:] MM |
"04:08", "19.19", "T23:43" |
Heures et minutes, sans double-points | 't'? HH MM |
"0408", "t1919", "T2343" |
Heures, minutes et secondes | 't'? HH [.:] MM [.:] II |
"04.08.37", "t19:19:19" |
Heures, minutes et secondes, sans double-points | 't'? HH MM II |
"040837", "T191919" |
Heures, minutes, secondes et fuseau horaire | 't'? HH [.:] MM [.:] II space ? ( tzcorrection | tz ) |
"040837CEST", "T191919-0700" |
Heures, minutes, secondes et fraction | 't'? HH [.:] MM [.:] II frac |
"04.08.37.81412", "19:19:19.532453" |
Information de fuseau horaire | tz | tzcorrection |
"CEST", "Europe/Amsterdam", "+0430", "GMT-06:00" |
Cette page décrit les différents formats dans une syntaxe de type BNF que les analyseurs de DateTimeImmutable, DateTime, date_create(), date_create_immutable(), et strtotime() comprennent.
Pour formatter des objets DateTimeImmutable et DateTime, veuillez vous référer à la documentation de la méthode DateTimeInterface::format().
Description | Format | Exemples |
---|---|---|
suffixe des jours |
"st" | "nd" | "rd" | "th" | |
dd |
([0-2]?[0-9] | "3"[01]) daysuf ? |
"7th", "22nd", "31" |
DD |
"0" [0-9] | [1-2][0-9] | "3" [01] | "07", "31" |
m |
'january' | 'february' | 'march' | 'april' | 'may' | 'june' | 'july' | 'august' | 'september' | 'october' | 'november' | 'december' | 'jan' | 'feb' | 'mar' | 'apr' | 'may' | 'jun' | 'jul' | 'aug' | 'sep' | 'sept' | 'oct' | 'nov' | 'dec' | "I" | "II" | "III" | "IV" | "V" | "VI" | "VII" | "VIII" | "IX" | "X" | "XI" | "XII" | |
M |
'jan' | 'feb' | 'mar' | 'apr' | 'may' | 'jun' | 'jul' | 'aug' | 'sep' | 'sept' | 'oct' | 'nov' | 'dec' | |
mm |
"0"? [0-9] | "1"[0-2] | "0", "04", "7", "12" |
MM |
"0" [0-9] | "1"[0-2] | "00", "04", "07", "12" |
y |
[0-9]{1,4} | "00", "78", "08", "8", "2008" |
yy |
[0-9]{2} | "00", "08", "78" |
YY |
[0-9]{4} | "2000", "2008", "1978" |
YYY |
[0-9]{5,19} | "81412", "20192" |
Description | Exemples |
---|---|
ATOM | "2022-06-02T16:58:35+00:00" |
COOKIE | "Thursday, 02-Jun-2022 16:58:35 UTC" |
ISO8601 | "2022-06-02T16:58:35+0000" |
» RFC 822 | "Thu, 02 Jun 22 16:58:35 +0000" |
» RFC 850 | "Thursday, 02-Jun-22 16:58:35 UTC" |
» RFC 1036 | "Thu, 02 Jun 22 16:58:35 +0000" |
» RFC 1123 | "Thu, 02 Jun 2022 16:58:35 +0000" |
» RFC 2822 | "Thu, 02 Jun 2022 16:58:35 +0000" |
» RFC 3339 | "2022-06-02T16:58:35+00:00" |
» RFC 3339 Extended | "2022-06-02T16:58:35.698+00:00" |
» RFC 7231 | "Thu, 02 Jun 2022 16:58:35 GMT" |
RSS | "Thu, 02 Jun 2022 16:58:35 +0000" |
W3C | "2022-06-02T16:58:35+00:00" |
Description | Format | Exemples |
---|---|---|
Mois américain et jour | mm "/" dd |
"5/12", "10/27" |
Mois américain, jour et année | mm "/" dd "/" y |
"12/22/78", "1/17/2006", "1/17/6" |
Année sur quatre chiffres, mois et jour avec slashs | YY "/" mm "/" dd |
"2008/6/30", "1978/12/22" |
Année sur quatre chiffres et mois (GNU) | YY "-" mm |
"2008-6", "2008-06", "1978-12" |
Année, mois et jour avec tirets | y "-" mm "-" dd |
"2008-6-30", "78-12-22", "8-6-21" |
Jour, mois et année sur quatre chiffres, avec des points, des tabulations ou des tirets | dd [.\t-] mm [.-] YY |
"30-6-2008", "22.12.1978" |
Jour, mois et année sur deux chiffres, avec des points ou des tabulations | dd [.\t] mm "." yy |
"30.6.08", "22\t12.78" |
Jour, mois textuel et année | dd ([ \t.-])* m ([ \t.-])* y |
"30-June 2008", "22DEC78", "14 III 1879" |
Mois textuel et année sur quatre chiffres (le jour sera le 1) | m ([ \t.-])* YY |
"June 2008", "DEC1978", "March 1879" |
Année sur quatre chiffres et mois textuel (le jour sera le 1) | YY ([ \t.-])* m |
"2008 June", "1978-XII", "1879.MArCH" |
Mois textuel, jour et année | m ([ .\t-])* dd [,.stndrh\t ]+ y |
"July 1st, 2008", "April 17, 1790", "May.9,78" |
Mois textuel et jour | m ([ .\t-])* dd [,.stndrh\t ]* |
"July 1st,", "Apr 17", "May.9" |
Jour et mois textuel | dd ([ .\t-])* m |
"1 July", "17 Apr", "9.May" |
Mois abrégé, jour et année | M "-" DD "-" y |
"May-09-78", "Apr-17-1790" |
Année, mois abrégé et jour | y "-" M "-" DD |
"78-Dec-22", "1814-MAY-17" |
Année (et juste l'année) | YY |
"1978", "2008" |
Année (développé, 5-19 chiffres avec signe) | [+-] YYY |
"-81120", "+20192" |
Mois textuel (et juste le mois) | m |
"March", "jun", "DEC" |
Description | Format | Exemples |
---|---|---|
Année, mois et jour sur huit chiffres | YY MM DD |
"15810726", "19780417", "18140517" |
Année sur quatre chiffres, mois et jour avec des slashes | YY "/" MM "/" DD |
"2008/06/30", "1978/12/22" |
Année sur deux chiffres, mois et jour avec des tirets | yy "-" MM "-" DD |
"08-06-30", "78-12-22" |
Année sur quatre chiffres avec un signe optionnel, mois et jour | [+-]? YY "-" MM "-" DD |
"-0002-07-26", "+1978-04-17", "1814-05-17" |
Année à cinq chiffres avec le signe, le mois et le jour requis | [+-] YYY "-" MM "-" DD |
"-81120-02-26", "+20192-04-17" |
Note:
Pour les formats
y
etyy
, les années avant 100 sont considérées d'une manière spéciale lorsque les symbolesy
ouyy
sont utilisés. Si l'année est comprise entre 0 (inclusif) et 69 (inclusif), 2000 sera ajouté. Si l'année est comprise entre 70 (inclusif) et 99 (inclusif) alors 1900 sera ajouté. Cela signifie que "00-01-01" est interprété comme "2000-01-01".
Note:
Le format "Jour, mois et année sur deux chiffres avec tabulations ou points" (
dd
[.\t]mm
"."yy
) ne fonctionne que pour des valeurs d'années de 61 (inclusif) à 99 (inclusif) - en dehors de ces bornes, le format du temps "HH
[.:]MM
[.:]SS
" a une précédence plus forte et primera.
Note:
Le format "Année (et seulement l'année)" ne fonctionne de manière fiable que si une chaîne de temps a déjà été trouvée. Sinon, si l'année à quatre chiffres correspond à
HH
MM
, ces deux éléments de date sont définis à la place.Pour analyser de manière cohérente seulement une année, utilisez DateTimeImmutable::createFromFormat() avec le spécificateur
Y
.
Il est possible d'ajouter ou soustraire une retenue pour les formats
dd
et DD
. Le jour 0 signifie le dernier
jour du mois précédent, les retenues positives compteront le mois suivant.
Ainsi, "2008-08-00" est équivalent à "2008-07-31" et "2008-06-31" est équivalent
à "2008-07-01" (juin ne possède que 30 jours).
Il est à noter que la plage de jour est limitée à 0-31 comme indiqué par l'expression régulière ci-dessus. Ainsi, "2008-06-32" n'est pas une chaîne de date valide, par exemple.
Il est aussi possible de jouer avec les retenues des formats mm
et
MM
grâce à la valeur 0. Une valeur de mois de 0 signifie Décembre
de l'année précédente. Par exemple "2008-00-22" est équivalent à "2007-12-22".
Si vous combinez les deux notions précédentes et utilisez une retenue négative sur le jour et le mois, alors il se passe ceci : "2008-00-00" est converti d'abord vers "2007-12-00" puis vers "2007-11-30". Ceci arrive aussi avec la chaine "0000-00-00" qui est alors transformée vers "-0001-11-30" (l'année -1 dans le calendrier ISO 8601, qui est 2 BC dans le calendrier Grégorien).
Cette page décrit les différents formats dans une syntaxe de type BNF que les analyseurs de DateTimeImmutable, DateTime, date_create(), date_create_immutable(), et strtotime() comprennent.
Pour formatter des objets DateTimeImmutable et DateTime, veuillez vous référer à la documentation de la méthode DateTimeInterface::format().
Description | Formats | Exemples |
---|---|---|
DD |
"0" [0-9] | [1-2][0-9] | "3" [01] | "02", "12", "31" |
doy |
"00"[1-9] | "0"[1-9][0-9] | [1-2][0-9][0-9] | "3"[0-5][0-9] | "36"[0-6] | "001", "012", "180", "350", "366" |
frac |
. [0-9]+ | ".21342", ".85" |
hh |
"0"?[1-9] | "1"[0-2] | "04", "7", "12" |
HH |
[01][0-9] | "2"[0-4] | "04", "07", "19" |
méridien |
[AaPp] .? [Mm] .? [\0\t ] | "A.m.", "pM", "am." |
ii |
[0-5]?[0-9] | "04", "8", "59" |
II |
[0-5][0-9] | "04", "08", "59" |
M |
'jan' | 'feb' | 'mar' | 'apr' | 'may' | 'jun' | 'jul' | 'aug' | 'sep' | 'sept' | 'oct' | 'nov' | 'dec' | |
MM |
[0-1][0-9] | "00", "12" |
espace |
[ \t] | |
ss |
([0-5]?[0-9])|60 | "04", "8", "59", "60" (seconde intercalaire) |
SS |
[0-5][0-9] | "04", "08", "59" |
W |
"0"[1-9] | [1-4][0-9] | "5"[0-3] | "05", "17", "53" |
tzcorrection |
"GMT"? [+-] hh ":"? II ? |
"+0400", "GMT-07:00", "-07:00" |
YY |
[0-9]{4} | "2000", "2008", "1978" |
Description | Format | Exemples |
---|---|---|
Format de log commun | dd "/" M "/" YY : HH ":" II ":" SS space tzcorrection |
"10/Oct/2000:13:55:36 -0700" |
EXIF | YY ":" MM ":" DD " " HH ":" II ":" SS |
"2008:08:07 18:11:31" |
Année ISO avec semaine ISO | YY "-"? "W" W |
"2008W27", "2008-W28" |
Année ISO avec semaine ISO et jour | YY "-"? "W" W "-"? [0-7] |
"2008W273", "2008-W28-3" |
MySQL | YY "-" MM "-" DD " " HH ":" II ":" SS |
"2008-08-07 18:11:31" |
PostgreSQL : Année avec jour de l'année | YY "."? doy |
"2008.197", "2008197" |
SOAP | YY "-" MM "-" DD "T" HH ":" II ":" SS frac tzcorrection ? |
"2008-07-01T22:35:17.02", "2008-07-01T22:35:17.03+08:00" |
Unix Timestamp | "@" "-"? [0-9]+ | "@1215282385" |
Unix Timestamp avec les microsecondes | "@" "-"? [0-9]+ "." [0-9]{0,6} | "@1607974647.503686" |
XMLRPC | YY MM DD "T" hh ":" II ":" SS |
"20080701T22:38:07", "20080701T9:38:07" |
XMLRPC (Compact) | YY MM DD 't' hh II SS |
"20080701t223807", "20080701T093807" |
WDDX | YY "-" mm "-" dd "T" hh ":" ii ":" ss |
"2008-7-1T9:3:37" |
Note:
Le "W" dans les formats "Année ISO avec semaine ISO" et "Année ISO avec semaine ISO et jour" est sensible à la casse ; vous ne pouvez utiliser que la majuscule "W".
Le "T" dans les formats SOAP, XMRPC et WDDX est sensible à la casse ; utilisez toujours la majuscule "T".
Le format timestamp Unix définit le fuseau horaire à UTC.
Cette page décrit les différents formats dans une syntaxe de type BNF que les analyseurs de DateTimeImmutable, DateTime, date_create(), date_create_immutable(), et strtotime() comprennent.
Pour formatter des objets DateTimeImmutable et DateTime, veuillez vous référer à la documentation de la méthode DateTimeInterface::format().
Description | Format |
---|---|
dayname |
'sunday' | 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday' | 'sun' | 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat' |
daytext |
'weekday' | 'weekdays' |
number |
[+-]?[0-9]+ |
ordinal |
'first' | 'second' | 'third' | 'fourth' | 'fifth' | 'sixth' | 'seventh' | 'eighth' | 'ninth' | 'tenth' | 'eleventh' | 'twelfth' | 'next' | 'last' | 'previous' | 'this' |
reltext |
'next' | 'last' | 'previous' | 'this' |
space |
[ \t]+ |
unit |
'ms' | 'µs' | (( 'msec' | 'millisecond' | 'µsec' | 'microsecond'
| 'usec' | 'sec' | 'second' | 'min' | 'minute' | 'hour' | 'day' |
'fortnight' | 'forthnight' | 'month' | 'year') 's'?) | 'weeks' |
daytext
|
Format | Description | Exemples |
---|---|---|
'yesterday' | Minuit d'hier | "yesterday 14:00" |
'midnight' | Le temps est affecté à 00:00:00 | |
'today' | Le temps est affecté à 00:00:00 | |
'now' | Maintenant | |
'noon' | Le temps est affecté à 12:00:00 | "yesterday noon" |
'tomorrow' | Minuit de demain | |
'back of' hour |
15 minutes avant l'heure précisée | "back of 7pm", "back of 15" |
'front of' hour |
15 minutes après l'heure spécifiée | "front of 5am", "front of 23" |
'first day of'? | Affecte le jour du premier jour du mois courant. Il est généralement préférable d'utiliser cette expression avec le nom du mois qui suit, car elle ne concerne que le mois en cours. | "first day of January 2008" |
'last day of'? | Affecte le jour du dernier jour du mois courant. Il est généralement préférable d'utiliser cette expression avec le nom du mois qui suit, car elle ne concerne que le mois en cours. | "last day of next month" |
ordinal space dayname space 'of' |
Calcule le x -ème jour de semaine du mois en cours. |
"first sat of July 2008" |
'last' space dayname space 'of' |
Calcule le dernier jour de semaine du mois en cours. | "last sat of July 2008" |
number space ? (unit | 'week') |
Gère des temps relatifs dont la valeur est dénombrée. | "+5 weeks", "12 day", "-7 weekdays" |
(ordinal | reltext ) space unit |
Gère les éléments temporels relatifs dont la valeur est un texte.
last et previous sont équivalents à
-1 , this à 0, et next à
+1 . |
"fifth day", "second month", "last day", "previous year" |
'ago' | Utilise dans le passé toute description de temps relatif ('il y a'). | "2 days ago", "8 days ago 14:00", "2 months 5 days ago", "2 months ago 5 days", "2 days ago" |
dayname |
Se déplace vers le prochain jour indiqué.(Voir note) | "Monday" |
reltext space 'week' |
Gère le format spécial "weekday + last/this/next week". | "Monday next week" |
Note:
Les expressions relatives sont toujours traitées après les expressions non relatives. Ceci fait en sorte que "+1 week july 2008" et "july 2008 +1 week" sont équivalents.
"yesterday", "midnight", "today", "noon" et "tomorrow" sont des exceptions à cette règle. Notez que "tomorrow 11:00" et "11:00 tomorrow" sont différents. Soit la date d'aujourd'hui à "July 23rd, 2008", la première expression donne "2008-07-24 11:00" alors que la seconde donnera "2008-07-24 00:00". La raison est que ces cinq expressions influencent directement la date courante.
Les mots clés tel que "first day of" dépendent du contexte dans laquelle la chaîne de format relative est utilisé. Si utilisé avec une méthode statique ou une fonction, le référent est l'horodatage actuel du système. Cependant, si utilisé dans DateTime::modify() ou DateTimeImmutable::modify(), le référent est l'objet sur lequel la méthode
modify()
est appelée.
Note:
> Notez les remarques qui suivent lorsque le jour de semaine courant est le même que le jour de semaine utilisé dans la chaine de date/time. Le jour de semaine courant aurait pu être recalculé par rapport aux parties non relatives de la chaine date/time.
- "
dayname
" n'avance pas vers un autre jour. (Exemple : "Wed July 23rd, 2008" signifie "2008-07-23").- "
number
dayname
" n'avance pas vers un autre jour. (Exemple : "1 wednesday july 23rd, 2008" signifie "2008-07-23").- "
number
weekdayname
" ajoutera d'abord le nombre de semaines, mais n'avancera pas vers un autre jour. Dans ce cas "number
week" et "dayname
" sont deux blocs distincts. (Exemple : "+1 week wednesday july 23rd, 2008" signifie "2008-07-30").- "
ordinal
dayname
" avance vers un autre jour. (Exemple : "first wednesday july 23rd, 2008" signifie "2008-07-30").- "
number
weekordinal
dayname
" ajoutera d'abord le nombre de semaines et ensuite avancera vers un autre jour. Dans ce cas, "number
week" et "ordinal
dayname
" sont deux blocs distincts. (Exemple : "+1 week first wednesday july 23rd, 2008" signifie "2008-08-06").- "
ordinal
dayname
'of' " n'avance pas vers un autre jour. (Exemple : "first wednesday of july 23rd, 2008" signifie "2008-07-02" car la phrase avec 'of' remet à zéro le jour du mois vers '1' et le '23' sera ignoré).Notez aussi que le "of" dans "
ordinal
space
dayname
space
'of' " et "'last'space
dayname
espace
'of' " fait quelque chose de spécial.
- Il affecte le jour du mois à 1.
- "
ordinal
dayname
'of' " n'avance pas vers un autre jour. (Exemple : "first tuesday of july 2008" signifie "2008-07-01").- "
ordinal
dayname
" avance vers un autre jour. (Exemple : "first tuesday july 2008" signifie "2008-07-08", voyez aussi le point numéro 4 de la liste ci-dessus).- "'last'
dayname
'of' " prend le dernierdayname
du mois courant. (Exemple : "last wed of july 2008" signifie "2008-07-30")- "'last'
dayname
" prend le dernierdayname
à partir du jour actuel. (Exemple : "last wed july 2008" signifie "2008-06-25"; "july 2008" affecte d'abord la date courante à "2008-07-01" et ensuite "last wed" remonte au dernier mercredi qui est le "2008-06-25").
Note:
Les valeurs relatives des mois calculés sont basées sur le nombre de jours des mois que l'on utilise. Par exemple, "+2 month 2011-11-30", donnera comme résultat la date "2012-01-30". Ceci est du au fait que le mois de novembre comporte 30 jours, et que le mois de décembre en comporte 31, soit un ajout total de 61 jours.
Note:
number
est un nombre entier ; si un nombre décimal est donné, le point (ou la virgule) sera probablement interprété comme un délimiteur. Par exemple,'+1.5 hours'
sera analysé en tant que'+1 5 hours'
, et non pas comme'+1 hour +30 minutes'
.
Version | Description |
---|---|
8.2.0 |
number n'accepte plus plusieurs signes,
exemple +-2 .
|
7.0.8 | Les semaines commencent toujours le lundi. Autrefois, le dimanche était également considéré pour commencer une semaine. |