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. Symboles utilisés 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"
Notation 12 heures 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"
Notation 24 heures 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"
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. Symboles utilisés 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"
Standards Formats &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"
Notations localisées 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" Mois textuel (et juste le mois) m "March", "jun", "DEC"
Notations ISO8601 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"
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 HH MM. 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. Symboles utilisés 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"
Notations localisées 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" 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"
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. Symboles utilisés 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 (('sec' | 'second' | 'min' | 'minute' | 'hour' | 'day' | 'fortnight' | 'forthnight' | 'month' | 'year') 's'?) | 'weeks' | daytext
Notations basées sur le jour 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 space unit Gè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" dayname Se déplace vers le prochain jour indiqué. "Monday" reltext space '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"). "number dayname" 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"). "ordinal dayname" avance vers un autre jour. (Exemple : "first wednesday july 23rd, 2008" signifie "2008-07-30"). "number week ordinal 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 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.