Formats supportés de temps et de dates
Cette section décrit 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).
Un ensemble de règles générales devrait être pris en compte.
L'analyseur, permet à chaque unité (année, mois, jour, heure, minute, seconde)
la plage entière de valeurs. Pour une année c'est juste 4 chiffres, pour un
mois c'est 0-12, pour un jour 0-31 et pour l'heure et les minutes c'est 0-59.
60 est autorisé pour les secondes, car parfois des chaînes de dates avec
cette seconde intercalaire apparaisse. Mais PHP implémente le temps Unix
où "60" n'est pas un nombre de secondes valides et ainsi overflow.
strtotime returns &false; si un des nombres et en-dehors
de la plage, et DateTimeImmutable::__construct lance
une exception.
Si une chaîne contient une date, tous les éléments sont remis à 0.
Tous les éléments de temps moins significatifs sont remis à 0 si n'importe
quel élément d'un temps est présent dans la chaîne donnée.
L'analyseur est idiot, et n'effectue pas de vérification pour le rendre
plus rapide (et plus générique).
Il y a une vérification additionnelle si une date invalide est fourni :
]]>
&example.outputs;
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.
&example.outputs;
string(26) "2015-10-04 17:24:43.000000"
public $timezone_type =>
int(3)
public $timezone =>
string(13) "Europe/London"
}
]]>
Formats pour les temps (Time)
Cette page décrit les différents formats que les analyseurs de
DateTimeImmutable, DateTime,
date_create,
date_create_immutable, et
strtotime comprennent.
Notation 12 heuresDescriptionFormatExemplesHeures seules, avec méridienhhespace? méridien"4 am", "5PM"Heures et minutes, avec méridienhh [.:] MMspace? méridien"4:08 am", "7:19P.M."Heures, minutes et secondes avec méridienhh [.:] MM [.:] IIespace? 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"
Notation 24 heuresDescriptionFormatExemplesHeures et minutes't'? HH [.:] MM"04:08", "19.19", "T23:43"Heures et minutes, sans double-points't'? HHMM"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'? HHMMII"040837", "T191919"Heures, minutes, secondes et fuseau horaire't'? HH [.:] MM [.:] IIspace? ( tzcorrection | tz )"040837CEST", "T191919-0700"Heures, minutes, secondes et fraction't'? HH [.:] MM [.:] IIfrac"04.08.37.81412", "19:19:19.532453"Information de fuseau horairetz | tzcorrection"CEST", "Europe/Amsterdam", "+0430", "GMT-06:00"
Formats de dates
Cette page décrit les différents formats que les analyseurs de
DateTimeImmutable, DateTime,
date_create,
date_create_immutable, et
strtotime comprennent.
Standards Formats&Description;ExemplesATOM"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"
Notations localiséesDescriptionFormatExemplesMois américain et jourmm "/" dd"5/12", "10/27"Mois américain, jour et annéemm "/" dd "/" y"12/22/78", "1/17/2006", "1/17/6"Année sur quatre chiffres, mois et jour avec slashsYY "/" 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 tiretsy "-" 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 tiretsdd [.\t-] mm [.-] YY"30-6-2008", "22.12.1978"Jour, mois et année sur deux chiffres, avec des points ou des tabulationsdd [.\t] mm "." yy"30.6.08", "22\t12.78"Jour, mois textuel et annéedd ([ \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éem ([ .\t-])* dd [,.stndrh\t ]+ y"July 1st, 2008", "April 17, 1790", "May.9,78"Mois textuel et jourm ([ .\t-])* dd [,.stndrh\t ]*"July 1st,", "Apr 17", "May.9"Jour et mois textueldd ([ .\t-])* m"1 July", "17 Apr", "9.May"Mois abrégé, jour et annéeM "-" DD "-" y"May-09-78", "Apr-17-1790"Année, mois abrégé et joury "-" M "-" DD"78-Dec-22", "1814-MAY-17"Année (et juste l'année)YY"1978", "2008"Mois textuel (et juste le mois)m"March", "jun", "DEC"
Notations ISO8601DescriptionFormatExemplesAnnée, mois et jour sur huit chiffresYYMMDD"15810726", "19780417", "18140517"Année sur quatre chiffres, mois et jour avec des slashesYY "/" MM "/" DD"2008/06/30", "1978/12/22"Année sur deux chiffres, mois et jour avec des tiretsyy "-" 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"
Pour les formats y et yy, les années
avant 100 sont considérées d'une manière spéciale lorsque les
symboles y ou yy 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".
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.
Le format "Année (et juste l'année)" ne fonctionne que si la chaine qui
représente le temps a déjà été trouvée, sinon le format est reconnu comme
HHMM.
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).
Formats composés
Cette page décrit les différents formats que les analyseurs de
DateTimeImmutable, DateTime,
date_create,
date_create_immutable, et
strtotime comprennent.
Notations localiséesDescriptionFormatExemplesFormat de log commundd "/" M "/" YY : HH ":" II ":" SSspacetzcorrection"10/Oct/2000:13:55:36 -0700"EXIFYY ":" MM ":" DD " " HH ":" II ":" SS"2008:08:07 18:11:31"Année ISO avec semaine ISOYY "-"? "W" W"2008W27", "2008-W28"Année ISO avec semaine ISO et jourYY "-"? "W" W "-"? [0-7]"2008W273", "2008-W28-3"MySQLYY "-" MM "-" DD " " HH ":" II ":" SS"2008-08-07 18:11:31"PostgreSQL : Année avec jour de l'annéeYY "."? doy"2008.197", "2008197"SOAPYY "-" MM "-" DD "T" HH ":" II ":" SSfractzcorrection?"2008-07-01T22:35:17.02", "2008-07-01T22:35:17.03+08:00"Unix Timestamp"@" "-"? [0-9]+"@1215282385"XMLRPCYYMMDD "T" hh ":" II ":" SS"20080701T22:38:07", "20080701T9:38:07"XMLRPC (Compact)YYMMDD 't' hhIISS"20080701t223807", "20080701T093807"WDDXYY "-" mm "-" dd "T" hh ":" ii ":" ss"2008-7-1T9:3:37"
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.
Formats relatifs
Cette page décrit les différents formats que les analyseurs de
DateTimeImmutable, DateTime,
date_create,
date_create_immutable, et
strtotime comprennent.
Notations basées sur le jourFormatDescriptionExemples'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' hour15 minutes avant l'heure précisée"back of 7pm", "back of 15"'front of' hour15 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"ordinalspacedaynamespace 'of'Calcule le x-ème jour de semaine du mois en cours."first sat of July 2008"'last' spacedaynamespace 'of'Calcule le dernier jour de semaine du mois en cours."last sat of July 2008"numberspace? (unit | 'week')Gère des temps relatifs dont la valeur est dénombrée."+5 weeks", "12 day", "-7 weekdays"ordinalspaceunitGère des temps relatifs dont la valeur est dénombrée."fifth day", "second month"'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"daynameSe déplace vers le prochain jour indiqué."Monday"reltextspace 'week'Gère le format spécial "weekday + last/this/next week"."Monday next week"
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.
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").
"numberdayname" n'avance
pas vers un autre jour. (Exemple : "1
wednesday july 23rd, 2008" signifie "2008-07-23").
"number week dayname" 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").
"ordinaldayname"
avance vers un autre jour. (Exemple : "first
wednesday july 23rd, 2008" signifie "2008-07-30").
"number week ordinaldayname" ajoutera d'abord le nombre de semaines
et ensuite avancera vers un autre jour.
Dans ce cas, "number week" et
"ordinaldayname" sont deux blocs
distincts. (Exemple : "+1 week first wednesday july 23rd,
2008" signifie "2008-08-06").
"ordinaldayname '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 "ordinalspacedaynamespace 'of' " et "'last' spacedaynameespace 'of' " fait quelque
chose de spécial.
Il affecte le jour du mois à 1.
"ordinaldayname 'of' " n'avance
pas vers un autre jour. (Exemple : "first
tuesday of july 2008" signifie "2008-07-01").
"ordinaldayname "
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 dernier
dayname du mois courant. (Exemple : "last
wed of july 2008" signifie "2008-07-30")
"'last' dayname" prend le dernier
dayname à 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").
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.
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'.
&reftitle.changelog;
&Version;&Description;7.0.8
Les semaines commencent toujours le lundi. Autrefois, le dimanche était
également considéré pour commencer une semaine.