PHP 8.2.0 Alpha 2 available for testing

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"

Note:

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".

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 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.

Attention

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).

add a note

User Contributed Notes 1 note

up
0
aryfilipiak at gmail dot com
4 months ago
The ISO 8601 has the Week Date. I wrote this function. I hope that it can help someone.
If second parameter is not empty it assumes that $a is the year, $b the month and $c the day, and return basic ISO week date: YYYYWwwD (default) or extended: YYYY-Www-D (if $x is true);
If just first parameter is not empty assumes it is a ISO week date (basic or extended), and return  the Unix timestamp.

function ISOwd($a,$b='',$c='',$x=false) {
    if (!$b) {
        if (!preg_match_all('/([0-9]{4})-*W*([0-9]{2})-*([0-9]{1})/', $a, $m, PREG_SET_ORDER))
            return null;
        /* Now year is $m[0][1], week is $m[0][2] and day is $m[0][3] */
        $fd = mktime(0,0,0,1,1,$m[0][1]);  // first day of the first week of the year
        $n  = date('N', $fd);
        /* if ($n==7) $fd=2;  if ($n==6) $fd=3;  if ($n==5) $fd=4;
           if ($n==4) $fd=29; if ($n==3) $fd=30; if ($n==2) $fd=31; if ($n==1) $fd=1; */
        if ($n>4) $fd = mktime(0,0,0,1,9-$n,$m[0][1]);
        elseif ($n>1) $fd = mktime(0,0,0,12,33-$n,$m[0][1]-1);
        return strtotime(date('d-m-Y',$fd).' + '.($m[0][2]-1).' week'.' + '.($m[0][3]-1).' days');
    }
    $f = ($x) ? 'o-\WW-N' : 'o\WWN'; // basic / extended format
    return date($f, mktime(0,0,0,$b,$c,$a));
}
// Example:
echo $test = ISOwd(date('y'),date('m'),date('d'));
echo '<br>';
echo date('y-m-d',ISOwd($test));
echo '<br>';
echo $test = ISOwd(date('y'),date('m'),date('d'),true);
echo '<br>';
echo date('y-m-d',ISOwd($test));
To Top