Files
doc-fr/reference/datetime/formats.xml
Gina Peter Banyard 1e92c8eaab Sync markup fixes
2024-04-24 21:54:20 +01:00

1239 lines
43 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: ac83abe55f4da019036de5ec14400d674fa3f9f5 Maintainer: victor-prdh Status: ready -->
<!-- Reviewed: no -->
<chapter xml:id="datetime.formats" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Formats supportés de temps et de dates</title>
<para>
Cette section décrit, dans un format de type BNF, tous les formats différents
que l'analyseur de <classname>DateTimeImmutable</classname>,
<classname>DateTime</classname>, <function>date_create_immutable</function>,
<function>date_create</function>, <function>date_parse</function>, et
<function>strtotime</function> 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 (<literal>'t'</literal> pourrait s'écrire <literal>t</literal> ou
<literal>T</literal>), les caractères écrits entre guillemets doubles, eux,
sont sensibles à la casse (<literal>"T"</literal> et seulement <literal>T</literal>).
</para>
<para>
Pour formatter des objets <classname>DateTimeImmutable</classname> et
<classname>DateTime</classname>, veuillez vous référer à la documentation
de la méthode <function>DateTimeInterface::format</function>.
</para>
<para>
Un ensemble de règles générales devrait être pris en compte.
</para>
<orderedlist>
<listitem>
<simpara>
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.
</simpara>
</listitem>
<listitem>
<simpara>
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.
</simpara>
</listitem>
<listitem>
<simpara>
<function>strtotime</function> returns &false; si un des nombres et en-dehors
de la plage, et <function>DateTimeImmutable::__construct</function> lance
une exception.
</simpara>
</listitem>
<listitem>
<simpara>
Si une chaîne contient une date, tous les éléments sont remis à 0.
</simpara>
</listitem>
<listitem>
<simpara>
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.
</simpara>
</listitem>
<listitem>
<simpara>
L'analyseur est idiot, et n'effectue pas de vérification pour le rendre
plus rapide (et plus générique).
</simpara>
</listitem>
<listitem>
<simpara>
Outre les règles applicables aux éléments temporels individuels,
l'analyseur comprend également des
<link linkend="datetime.formats.compound">formats composés</link> plus
spécifiques, tels que l'analyse des horodatages Unix (<literal>@1690388256</literal>)
et des dates hebdomadaires ISO (<literal>2008-W28-3</literal>).
</simpara>
</listitem>
<listitem>
<para>
Il y a une vérification additionnelle si une date invalide est fourni :
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
$res = date_parse("2015-09-31");
var_dump($res["warnings"]);
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
array(1) {
[11] =>
string(27) "The parsed date was invalid"
}
]]>
</screen>
</informalexample>
</para>
</listitem>
<listitem>
<para>
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
<function>DateTimeImmutable::createFromFormat</function> est requis en
fournissant le format voulu.
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
$res = DateTimeImmutable::createFromFormat("Y-m-d", "2015-09-34");
var_dump($res);
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
object(DateTimeImmutable)#1 (3) {
["date"] =>
string(26) "2015-10-04 17:24:43.000000"
["timezone_type"] =>
int(3)
["timezone"] =>
string(13) "Europe/London"
}
]]>
</screen>
</informalexample>
</para>
</listitem>
</orderedlist>
<!--Time Formats: {{{-->
<sect1 annotations="chunk:false" xml:id="datetime.formats.time">
<title>Formats pour les temps (Time)</title>
<para>
Cette page décrit les différents formats dans une syntaxe de type BNF
que les analyseurs de <classname>DateTimeImmutable</classname>,
<classname>DateTime</classname>, <function>date_create</function>,
<function>date_create_immutable</function>, et
<function>strtotime</function> comprennent.
</para>
<para>
Pour formatter des objets <classname>DateTimeImmutable</classname> et
<classname>DateTime</classname>, veuillez vous référer à la documentation
de la méthode <function>DateTimeInterface::format</function>.
</para>
<table>
<title>Symboles utilisés</title>
<tgroup cols="3">
<thead>
<row>
<entry>Description</entry>
<entry>Formats</entry>
<entry>Exemples</entry>
</row>
</thead>
<tbody>
<row>
<entry><literal>frac</literal></entry>
<entry>. [0-9]+</entry>
<entry>".21342", ".85"</entry>
</row>
<row>
<entry><literal>hh</literal></entry>
<entry>"0"?[1-9] | "1"[0-2]</entry>
<entry>"04", "7", "12"</entry>
</row>
<row>
<entry><literal>HH</literal></entry>
<entry>[01][0-9] | "2"[0-4]</entry>
<entry>"04", "07", "19"</entry>
</row>
<row>
<entry><literal>méridien</literal></entry>
<entry>[AaPp] .? [Mm] .? [\0\t ]</entry>
<entry>"A.m.", "pM", "am."</entry>
</row>
<row>
<entry><literal>MM</literal></entry>
<entry>[0-5][0-9]</entry>
<entry>"00", "12", "59"</entry>
</row>
<row>
<entry><literal>II</literal></entry>
<entry>[0-5][0-9]</entry>
<entry>"00", "12", "59"</entry>
</row>
<row>
<entry><literal>espace</literal></entry>
<entry>[ \t]</entry>
<entry></entry>
</row>
<row>
<entry><literal>tz</literal></entry>
<entry>"("? [A-Za-z]{1,6} ")"? | [A-Z][a-z]+([_/][A-Z][a-z]+)+</entry>
<entry>"CEST", "Europe/Amsterdam", "America/Indiana/Knox"</entry>
</row>
<row>
<entry><literal>tzcorrection</literal></entry>
<entry>"GMT"? [+-] <literal>hh</literal> ":"? <literal>MM</literal>?</entry>
<entry>"+0400", "GMT-07:00", "-07:00"</entry>
</row>
</tbody>
</tgroup>
</table>
<table>
<title>Notation 12 heures</title>
<tgroup cols="3">
<thead>
<row>
<entry>Description</entry>
<entry>Format</entry>
<entry>Exemples</entry>
</row>
</thead>
<tbody>
<row>
<entry>Heures seules, avec méridien</entry>
<entry><literal>hh</literal> <literal>espace</literal>? <literal>méridien</literal></entry>
<entry>"4 am", "5PM"</entry>
</row>
<row>
<entry>Heures et minutes, avec méridien</entry>
<entry><literal>hh</literal> [.:] <literal>MM</literal> <literal>space</literal>? <literal>méridien</literal></entry>
<entry>"4:08 am", "7:19P.M."</entry>
</row>
<row>
<entry>Heures, minutes et secondes avec méridien</entry>
<entry><literal>hh</literal> [.:] <literal>MM</literal> [.:] <literal>II</literal> <literal>espace</literal>? <literal>méridien</literal></entry>
<entry>"4:08:37 am", "7:19:19P.M."</entry>
</row>
<row>
<entry>MS SQL (Heures, minutes, secondes et fraction avec méridien)</entry>
<entry><literal>hh</literal> ":" <literal>MM</literal> ":" <literal>II</literal> [.:] [0-9]+ <literal>meridian</literal></entry>
<entry>"4:08:39:12313am"</entry>
</row>
</tbody>
</tgroup>
</table>
<table>
<title>Notation 24 heures</title>
<tgroup cols="3">
<thead>
<row>
<entry>Description</entry>
<entry>Format</entry>
<entry>Exemples</entry>
</row>
</thead>
<tbody>
<row>
<entry>Heures et minutes</entry>
<entry>'t'? <literal>HH</literal> [.:] <literal>MM</literal></entry>
<entry>"04:08", "19.19", "T23:43"</entry>
</row>
<row>
<entry>Heures et minutes, sans double-points</entry>
<entry>'t'? <literal>HH</literal> <literal>MM</literal></entry>
<entry>"0408", "t1919", "T2343"</entry>
</row>
<row>
<entry>Heures, minutes et secondes</entry>
<entry>'t'? <literal>HH</literal> [.:] <literal>MM</literal> [.:] <literal>II</literal></entry>
<entry>"04.08.37", "t19:19:19"</entry>
</row>
<row>
<entry>Heures, minutes et secondes, sans double-points</entry>
<entry>'t'? <literal>HH</literal> <literal>MM</literal> <literal>II</literal></entry>
<entry>"040837", "T191919"</entry>
</row>
<row>
<entry>Heures, minutes, secondes et fuseau horaire</entry>
<entry>'t'? <literal>HH</literal> [.:] <literal>MM</literal> [.:] <literal>II</literal> <literal>space</literal>? ( <literal>tzcorrection</literal> | <literal>tz</literal> )</entry>
<entry>"040837CEST", "T191919-0700"</entry>
</row>
<row>
<entry>Heures, minutes, secondes et fraction</entry>
<entry>'t'? <literal>HH</literal> [.:] <literal>MM</literal> [.:] <literal>II</literal> <literal>frac</literal></entry>
<entry>"04.08.37.81412", "19:19:19.532453"</entry>
</row>
<row>
<entry>Information de fuseau horaire</entry>
<entry><literal>tz</literal> | <literal>tzcorrection</literal></entry>
<entry>"CEST", "Europe/Amsterdam", "+0430", "GMT-06:00"</entry>
</row>
</tbody>
</tgroup>
</table>
</sect1>
<!--}}}-->
<!--Date Formats: {{{-->
<sect1 annotations="chunk:false" xml:id="datetime.formats.date">
<title>Formats de dates</title>
<para>
Cette page décrit les différents formats dans une syntaxe de type BNF
que les analyseurs de <classname>DateTimeImmutable</classname>,
<classname>DateTime</classname>, <function>date_create</function>,
<function>date_create_immutable</function>, et
<function>strtotime</function> comprennent.
</para>
<para>
Pour formatter des objets <classname>DateTimeImmutable</classname> et
<classname>DateTime</classname>, veuillez vous référer à la documentation
de la méthode <function>DateTimeInterface::format</function>.
</para>
<table>
<title>Symboles utilisés</title>
<tgroup cols="3">
<thead>
<row>
<entry>Description</entry>
<entry>Format</entry>
<entry>Exemples</entry>
</row>
</thead>
<tbody>
<row>
<entry><literal>suffixe des jours</literal></entry>
<entry>"st" | "nd" | "rd" | "th"</entry>
<entry></entry>
</row>
<row>
<entry><literal>dd</literal></entry>
<entry>([0-2]?[0-9] | "3"[01]) <literal>daysuf</literal>?</entry>
<entry>"7th", "22nd", "31"</entry>
</row>
<row>
<entry><literal>DD</literal></entry>
<entry>"0" [0-9] | [1-2][0-9] | "3" [01]</entry>
<entry>"07", "31"</entry>
</row>
<row>
<entry><literal>m</literal></entry>
<entry>'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"</entry>
<entry></entry>
</row>
<row>
<entry><literal>M</literal></entry>
<entry>'jan' | 'feb' | 'mar' | 'apr' | 'may' | 'jun' | 'jul' | 'aug' |
'sep' | 'sept' | 'oct' | 'nov' | 'dec'</entry>
<entry></entry>
</row>
<row>
<entry><literal>mm</literal></entry>
<entry>"0"? [0-9] | "1"[0-2]</entry>
<entry>"0", "04", "7", "12"</entry>
</row>
<row>
<entry><literal>MM</literal></entry>
<entry>"0" [0-9] | "1"[0-2]</entry>
<entry>"00", "04", "07", "12"</entry>
</row>
<row>
<entry><literal>y</literal></entry>
<entry>[0-9]{1,4}</entry>
<entry>"00", "78", "08", "8", "2008"</entry>
</row>
<row>
<entry><literal>yy</literal></entry>
<entry>[0-9]{2}</entry>
<entry>"00", "08", "78"</entry>
</row>
<row>
<entry><literal>YY</literal></entry>
<entry>[0-9]{4}</entry>
<entry>"2000", "2008", "1978"</entry>
</row>
<row>
<entry><literal>YYY</literal></entry>
<entry>[0-9]{5,19}</entry>
<entry>"81412", "20192"</entry>
</row>
</tbody>
</tgroup>
</table>
<table>
<title>Standards Formats</title>
<tgroup cols="2">
<thead>
<row>
<entry>&Description;</entry>
<entry>Exemples</entry>
</row>
</thead>
<tbody>
<row>
<entry>ATOM</entry>
<entry>"2022-06-02T16:58:35+00:00"</entry>
</row>
<row>
<entry>COOKIE</entry>
<entry>"Thursday, 02-Jun-2022 16:58:35 UTC"</entry>
</row>
<row>
<entry>ISO8601</entry>
<entry>"2022-06-02T16:58:35+0000"</entry>
</row>
<row>
<entry><link xlink:href="&url.rfc;822">RFC 822</link></entry>
<entry>"Thu, 02 Jun 22 16:58:35 +0000"</entry>
</row>
<row>
<entry><link xlink:href="&url.rfc;850">RFC 850</link></entry>
<entry>"Thursday, 02-Jun-22 16:58:35 UTC"</entry>
</row>
<row>
<entry><link xlink:href="&url.rfc;1036">RFC 1036</link></entry>
<entry>"Thu, 02 Jun 22 16:58:35 +0000"</entry>
</row>
<row>
<entry><link xlink:href="&url.rfc;1123">RFC 1123</link></entry>
<entry>"Thu, 02 Jun 2022 16:58:35 +0000"</entry>
</row>
<row>
<entry><link xlink:href="&url.rfc;2822">RFC 2822</link></entry>
<entry>"Thu, 02 Jun 2022 16:58:35 +0000"</entry>
</row>
<row>
<entry><link xlink:href="&url.rfc;3339">RFC 3339</link></entry>
<entry>"2022-06-02T16:58:35+00:00"</entry>
</row>
<row>
<entry><link xlink:href="&url.rfc;3339">RFC 3339</link> Extended</entry>
<entry>"2022-06-02T16:58:35.698+00:00"</entry>
</row>
<row>
<entry><link xlink:href="&url.rfc;7231">RFC 7231</link></entry>
<entry>"Thu, 02 Jun 2022 16:58:35 GMT"</entry>
</row>
<row>
<entry>RSS</entry>
<entry>"Thu, 02 Jun 2022 16:58:35 +0000"</entry>
</row>
<row>
<entry>W3C</entry>
<entry>"2022-06-02T16:58:35+00:00"</entry>
</row>
</tbody>
</tgroup>
</table>
<table>
<title>Notations localisées</title>
<tgroup cols="3">
<thead>
<row>
<entry>Description</entry>
<entry>Format</entry>
<entry>Exemples</entry>
</row>
</thead>
<tbody>
<row>
<entry>Mois américain et jour</entry>
<entry><literal>mm</literal> "/" <literal>dd</literal></entry>
<entry>"5/12", "10/27"</entry>
</row>
<row>
<entry>Mois américain, jour et année</entry>
<entry><literal>mm</literal> "/" <literal>dd</literal> "/" <literal>y</literal></entry>
<entry>"12/22/78", "1/17/2006", "1/17/6"</entry>
</row>
<row>
<entry>Année sur quatre chiffres, mois et jour avec slashs</entry>
<entry><literal>YY</literal> "/" <literal>mm</literal> "/" <literal>dd</literal></entry>
<entry>"2008/6/30", "1978/12/22"</entry>
</row>
<row>
<entry>Année sur quatre chiffres et mois (GNU)</entry>
<entry><literal>YY</literal> "-" <literal>mm</literal></entry>
<entry>"2008-6", "2008-06", "1978-12"</entry>
</row>
<row>
<entry>Année, mois et jour avec tirets</entry>
<entry><literal>y</literal> "-" <literal>mm</literal> "-" <literal>dd</literal></entry>
<entry>"2008-6-30", "78-12-22", "8-6-21"</entry>
</row>
<row>
<entry>Jour, mois et année sur quatre chiffres, avec des points, des tabulations ou des tirets</entry>
<entry><literal>dd</literal> [.\t-] <literal>mm</literal> [.-] <literal>YY</literal></entry>
<entry>"30-6-2008", "22.12.1978"</entry>
</row>
<row>
<entry>Jour, mois et année sur deux chiffres, avec des points ou des tabulations</entry>
<entry><literal>dd</literal> [.\t] <literal>mm</literal> "." <literal>yy</literal></entry>
<entry>"30.6.08", "22\t12.78"</entry>
</row>
<row>
<entry>Jour, mois textuel et année</entry>
<entry><literal>dd</literal> ([ \t.-])* <literal>m</literal> ([ \t.-])* <literal>y</literal></entry>
<entry>"30-June 2008", "22DEC78", "14 III 1879"</entry>
</row>
<row>
<entry>Mois textuel et année sur quatre chiffres (le jour sera le 1)</entry>
<entry><literal>m</literal> ([ \t.-])* <literal>YY</literal></entry>
<entry>"June 2008", "DEC1978", "March 1879"</entry>
</row>
<row>
<entry>Année sur quatre chiffres et mois textuel (le jour sera le 1)</entry>
<entry><literal>YY</literal> ([ \t.-])* <literal>m</literal></entry>
<entry>"2008 June", "1978-XII", "1879.MArCH"</entry>
</row>
<row>
<entry>Mois textuel, jour et année</entry>
<entry><literal>m</literal> ([ .\t-])* <literal>dd</literal> [,.stndrh\t ]+ <literal>y</literal></entry>
<entry>"July 1st, 2008", "April 17, 1790", "May.9,78"</entry>
</row>
<row>
<entry>Mois textuel et jour</entry>
<entry><literal>m</literal> ([ .\t-])* <literal>dd</literal> [,.stndrh\t ]*</entry>
<entry>"July 1st,", "Apr 17", "May.9"</entry>
</row>
<row>
<entry>Jour et mois textuel</entry>
<entry><literal>dd</literal> ([ .\t-])* <literal>m</literal></entry>
<entry>"1 July", "17 Apr", "9.May"</entry>
</row>
<row>
<entry>Mois abrégé, jour et année</entry>
<entry><literal>M</literal> "-" <literal>DD</literal> "-" <literal>y</literal></entry>
<entry>"May-09-78", "Apr-17-1790"</entry>
</row>
<row>
<entry>Année, mois abrégé et jour</entry>
<entry><literal>y</literal> "-" <literal>M</literal> "-" <literal>DD</literal></entry>
<entry>"78-Dec-22", "1814-MAY-17"</entry>
</row>
<row>
<entry>Année (et juste l'année)</entry>
<entry><literal>YY</literal></entry>
<entry>"1978", "2008"</entry>
</row>
<row>
<entry>Année (développé, 5-19 chiffres avec signe)</entry>
<entry>[+-] <literal>YYY</literal></entry>
<entry>"-81120", "+20192"</entry>
</row>
<row>
<entry>Mois textuel (et juste le mois)</entry>
<entry><literal>m</literal></entry>
<entry>"March", "jun", "DEC"</entry>
</row>
</tbody>
</tgroup>
</table>
<table>
<title>Notations ISO8601</title>
<tgroup cols="3">
<thead>
<row>
<entry>Description</entry>
<entry>Format</entry>
<entry>Exemples</entry>
</row>
</thead>
<tbody>
<row>
<entry>Année, mois et jour sur huit chiffres</entry>
<entry><literal>YY</literal> <literal>MM</literal> <literal>DD</literal></entry>
<entry>"15810726", "19780417", "18140517"</entry>
</row>
<row>
<entry>Année sur quatre chiffres, mois et jour avec des slashes</entry>
<entry><literal>YY</literal> "/" <literal>MM</literal> "/" <literal>DD</literal></entry>
<entry>"2008/06/30", "1978/12/22"</entry>
</row>
<row>
<entry>Année sur deux chiffres, mois et jour avec des tirets</entry>
<entry><literal>yy</literal> "-" <literal>MM</literal> "-" <literal>DD</literal></entry>
<entry>"08-06-30", "78-12-22"</entry>
</row>
<row>
<entry>Année sur quatre chiffres avec un signe optionnel, mois et jour</entry>
<entry>[+-]? <literal>YY</literal> "-" <literal>MM</literal> "-" <literal>DD</literal></entry>
<entry>"-0002-07-26", "+1978-04-17", "1814-05-17"</entry>
</row>
<row>
<entry>Année à cinq chiffres avec le signe, le mois et le jour requis</entry>
<entry>[+-] <literal>YYY</literal> "-" <literal>MM</literal> "-" <literal>DD</literal></entry>
<entry>"-81120-02-26", "+20192-04-17"</entry>
</row>
</tbody>
</tgroup>
</table>
<note>
<para>
Pour les formats <literal>y</literal> et <literal>yy</literal>, les années
avant 100 sont considérées d'une manière spéciale lorsque les
symboles <literal>y</literal> ou <literal>yy</literal> 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".
</para>
</note>
<note>
<para>
Le format "Jour, mois et année sur deux chiffres avec tabulations ou points"
(<literal>dd</literal> [.\t] <literal>mm</literal> "."
<literal>yy</literal>) ne fonctionne que pour des valeurs d'années de 61 (inclusif)
à 99 (inclusif) - en dehors de ces bornes, le <emphasis>format du temps</emphasis>
"<literal>HH</literal> [.:] <literal>MM</literal> [.:] <literal>SS</literal>" a une
précédence plus forte et primera.
</para>
</note>
<note>
<para>
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
<literal>HH</literal> <literal>MM</literal>.
</para>
</note>
<caution>
<para>
Il est possible d'ajouter ou soustraire une retenue pour les formats
<literal>dd</literal> et <literal>DD</literal>. 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).
</para>
<para>
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.
</para>
<para>
Il est aussi possible de jouer avec les retenues des formats <literal>mm</literal> et
<literal>MM</literal> 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".
</para>
<para>
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).
</para>
</caution>
</sect1>
<!--}}}-->
<!--Compound Formats: {{{-->
<sect1 annotations="chunk:false" xml:id="datetime.formats.compound">
<title>Formats composés</title>
<para>
Cette page décrit les différents formats dans une syntaxe de type BNF que les analyseurs de
<classname>DateTimeImmutable</classname>, <classname>DateTime</classname>,
<function>date_create</function>,
<function>date_create_immutable</function>, et
<function>strtotime</function> comprennent.
</para>
<para>
Pour formatter des objets <classname>DateTimeImmutable</classname> et
<classname>DateTime</classname>, veuillez vous référer à la documentation
de la méthode <function>DateTimeInterface::format</function>.
</para>
<table>
<title>Symboles utilisés</title>
<tgroup cols="3">
<thead>
<row>
<entry>Description</entry>
<entry>Formats</entry>
<entry>Exemples</entry>
</row>
</thead>
<tbody>
<row>
<entry><literal>DD</literal></entry>
<entry>"0" [0-9] | [1-2][0-9] | "3" [01]</entry>
<entry>"02", "12", "31"</entry>
</row>
<row>
<entry><literal>doy</literal></entry>
<entry>"00"[1-9] | "0"[1-9][0-9] | [1-2][0-9][0-9] | "3"[0-5][0-9] | "36"[0-6]</entry>
<entry>"001", "012", "180", "350", "366"</entry>
</row>
<row>
<entry><literal>frac</literal></entry>
<entry>. [0-9]+</entry>
<entry>".21342", ".85"</entry>
</row>
<row>
<entry><literal>hh</literal></entry>
<entry>"0"?[1-9] | "1"[0-2]</entry>
<entry>"04", "7", "12"</entry>
</row>
<row>
<entry><literal>HH</literal></entry>
<entry>[01][0-9] | "2"[0-4]</entry>
<entry>"04", "07", "19"</entry>
</row>
<row>
<entry><literal>méridien</literal></entry>
<entry>[AaPp] .? [Mm] .? [\0\t ]</entry>
<entry>"A.m.", "pM", "am."</entry>
</row>
<row>
<entry><literal>ii</literal></entry>
<entry>[0-5]?[0-9]</entry>
<entry>"04", "8", "59"</entry>
</row>
<row>
<entry><literal>II</literal></entry>
<entry>[0-5][0-9]</entry>
<entry>"04", "08", "59"</entry>
</row>
<row>
<entry><literal>M</literal></entry>
<entry>'jan' | 'feb' | 'mar' | 'apr' | 'may' | 'jun' | 'jul' | 'aug' | 'sep' | 'sept' | 'oct' | 'nov' | 'dec'</entry>
<entry></entry>
</row>
<row>
<entry><literal>MM</literal></entry>
<entry>[0-1][0-9]</entry>
<entry>"00", "12"</entry>
</row>
<row>
<entry><literal>espace</literal></entry>
<entry>[ \t]</entry>
<entry></entry>
</row>
<row>
<entry><literal>ss</literal></entry>
<entry>([0-5]?[0-9])|60</entry>
<entry>"04", "8", "59", "60" (seconde intercalaire)</entry>
</row>
<row>
<entry><literal>SS</literal></entry>
<entry>[0-5][0-9]</entry>
<entry>"04", "08", "59"</entry>
</row>
<row>
<entry><literal>W</literal></entry>
<entry>"0"[1-9] | [1-4][0-9] | "5"[0-3]</entry>
<entry>"05", "17", "53"</entry>
</row>
<row>
<entry><literal>tzcorrection</literal></entry>
<entry>"GMT"? [+-] <literal>hh</literal> ":"? <literal>II</literal>?</entry>
<entry>"+0400", "GMT-07:00", "-07:00"</entry>
</row>
<row>
<entry><literal>YY</literal></entry>
<entry>[0-9]{4}</entry>
<entry>"2000", "2008", "1978"</entry>
</row>
</tbody>
</tgroup>
</table>
<table>
<title>Notations localisées</title>
<tgroup cols="3">
<thead>
<row>
<entry>Description</entry>
<entry>Format</entry>
<entry>Exemples</entry>
</row>
</thead>
<tbody>
<row>
<entry>Format de log commun</entry>
<entry><literal>dd</literal> "/" <literal>M</literal> "/" <literal>YY</literal> : <literal>HH</literal> ":" <literal>II</literal> ":" <literal>SS</literal> <literal>space</literal> <literal>tzcorrection</literal></entry>
<entry>"10/Oct/2000:13:55:36 -0700"</entry>
</row>
<row>
<entry>EXIF</entry>
<entry><literal>YY</literal> ":" <literal>MM</literal> ":" <literal>DD</literal> " " <literal>HH</literal> ":" <literal>II</literal> ":" <literal>SS</literal></entry>
<entry>"2008:08:07 18:11:31"</entry>
</row>
<row>
<entry>Année ISO avec semaine ISO</entry>
<entry><literal>YY</literal> "-"? "W" <literal>W</literal></entry>
<entry>"2008W27", "2008-W28"</entry>
</row>
<row>
<entry>Année ISO avec semaine ISO et jour</entry>
<entry><literal>YY</literal> "-"? "W" <literal>W</literal> "-"? [0-7]</entry>
<entry>"2008W273", "2008-W28-3"</entry>
</row>
<row>
<entry>MySQL</entry>
<entry><literal>YY</literal> "-" <literal>MM</literal> "-" <literal>DD</literal> " " <literal>HH</literal> ":" <literal>II</literal> ":" <literal>SS</literal></entry>
<entry>"2008-08-07 18:11:31"</entry>
</row>
<row>
<entry>PostgreSQL : Année avec jour de l'année</entry>
<entry><literal>YY</literal> "."? <literal>doy</literal></entry>
<entry>"2008.197", "2008197"</entry>
</row>
<row>
<entry>SOAP</entry>
<entry><literal>YY</literal> "-" <literal>MM</literal> "-" <literal>DD</literal> "T" <literal>HH</literal> ":" <literal>II</literal> ":" <literal>SS</literal> <literal>frac</literal> <literal>tzcorrection</literal>?</entry>
<entry>"2008-07-01T22:35:17.02", "2008-07-01T22:35:17.03+08:00"</entry>
</row>
<row>
<entry>Unix Timestamp</entry>
<entry>"@" "-"? [0-9]+</entry>
<entry>"@1215282385"</entry>
</row>
<row>
<entry>Unix Timestamp avec les microsecondes</entry>
<entry>"@" "-"? [0-9]+ "." [0-9]{0,6}</entry>
<entry>"@1607974647.503686"</entry>
</row>
<row>
<entry>XMLRPC</entry>
<entry><literal>YY</literal> <literal>MM</literal> <literal>DD</literal> "T" <literal>hh</literal> ":" <literal>II</literal> ":" <literal>SS</literal></entry>
<entry>"20080701T22:38:07", "20080701T9:38:07"</entry>
</row>
<row>
<entry>XMLRPC (Compact)</entry>
<entry><literal>YY</literal> <literal>MM</literal> <literal>DD</literal> 't' <literal>hh</literal> <literal>II</literal> <literal>SS</literal></entry>
<entry>"20080701t223807", "20080701T093807"</entry>
</row>
<row>
<entry>WDDX</entry>
<entry><literal>YY</literal> "-" <literal>mm</literal> "-" <literal>dd</literal> "T" <literal>hh</literal> ":" <literal>ii</literal> ":" <literal>ss</literal></entry>
<entry>"2008-7-1T9:3:37"</entry>
</row>
</tbody>
</tgroup>
</table>
<note>
<para>
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".
</para>
<para>
Le "T" dans les formats SOAP, XMRPC et WDDX est sensible à la casse ; utilisez toujours
la majuscule "T".
</para>
<para>
Le format timestamp Unix définit le fuseau horaire à UTC.
</para>
</note>
</sect1>
<!--}}}-->
<!--Relative Formats: {{{-->
<sect1 annotations="chunk:false" xml:id="datetime.formats.relative">
<title>Formats relatifs</title>
<para>
Cette page décrit les différents formats dans une syntaxe de type BNF
que les analyseurs de <classname>DateTimeImmutable</classname>,
<classname>DateTime</classname>, <function>date_create</function>,
<function>date_create_immutable</function>, et
<function>strtotime</function> comprennent.
</para>
<para>
Pour formatter des objets <classname>DateTimeImmutable</classname> et
<classname>DateTime</classname>, veuillez vous référer à la documentation
de la méthode <function>DateTimeInterface::format</function>.
</para>
<table>
<title>Symboles utilisés</title>
<tgroup cols="2">
<thead>
<row>
<entry>Description</entry>
<entry>Format</entry>
</row>
</thead>
<tbody>
<row>
<entry><literal>dayname</literal></entry>
<entry>'sunday' | 'monday' | 'tuesday' | 'wednesday' | 'thursday' |
'friday' | 'saturday' | 'sun' | 'mon' | 'tue' | 'wed' | 'thu' | 'fri' |
'sat'</entry>
</row>
<row>
<entry><literal>daytext</literal></entry>
<entry>'weekday' | 'weekdays'</entry>
</row>
<row>
<entry><literal>number</literal></entry>
<entry>[+-]?[0-9]+</entry>
</row>
<row>
<entry><literal>ordinal</literal></entry>
<entry>'first' | 'second' | 'third' | 'fourth' | 'fifth' | 'sixth' |
'seventh' | 'eighth' | 'ninth' | 'tenth' | 'eleventh' | 'twelfth' |
'next' | 'last' | 'previous' | 'this'</entry>
</row>
<row>
<entry><literal>reltext</literal></entry>
<entry>'next' | 'last' | 'previous' | 'this'</entry>
</row>
<row>
<entry><literal>space</literal></entry>
<entry>[ \t]+</entry>
</row>
<row>
<entry><literal>unit</literal></entry>
<entry>'ms' | 'µs' | (( 'msec' | 'millisecond' | 'µsec' | 'microsecond'
| 'usec' | 'sec' | 'second' | 'min' | 'minute' | 'hour' | 'day' |
'fortnight' | 'forthnight' | 'month' | 'year') 's'?) | 'weeks' |
<literal>daytext</literal>
</entry>
</row>
</tbody>
</tgroup>
</table>
<table>
<title>Notations basées sur le jour</title>
<tgroup cols="3">
<thead>
<row>
<entry>Format</entry>
<entry>Description</entry>
<entry>Exemples</entry>
</row>
</thead>
<tbody>
<row>
<entry>'yesterday'</entry>
<entry>Minuit d'hier</entry>
<entry>"yesterday 14:00"</entry>
</row>
<row>
<entry>'midnight'</entry>
<entry>Le temps est affecté à 00:00:00</entry>
<entry></entry>
</row>
<row>
<entry>'today'</entry>
<entry>Le temps est affecté à 00:00:00</entry>
<entry></entry>
</row>
<row>
<entry>'now'</entry>
<entry>Maintenant</entry>
<entry></entry>
</row>
<row>
<entry>'noon'</entry>
<entry>Le temps est affecté à 12:00:00</entry>
<entry>"yesterday noon"</entry>
</row>
<row>
<entry>'tomorrow'</entry>
<entry>Minuit de demain</entry>
<entry></entry>
</row>
<row>
<entry>'back of' <literal>hour</literal></entry>
<entry>15 minutes avant l'heure précisée</entry>
<entry>"back of 7pm", "back of 15"</entry>
</row>
<row>
<entry>'front of' <literal>hour</literal></entry>
<entry>15 minutes après l'heure spécifiée</entry>
<entry>"front of 5am", "front of 23"</entry>
</row>
<row>
<entry>'first day of'?</entry>
<entry>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.</entry>
<entry>"first day of January 2008"</entry>
</row>
<row>
<entry>'last day of'?</entry>
<entry>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.</entry>
<entry>"last day of next month"</entry>
</row>
<row>
<entry><literal>ordinal</literal> <literal>space</literal> <literal>dayname</literal> <literal>space</literal> 'of'</entry>
<entry>Calcule le <literal>x</literal>-ème jour de semaine du mois en cours.</entry>
<entry>"first sat of July 2008"</entry>
</row>
<row>
<entry>'last' <literal>space</literal> <literal>dayname</literal> <literal>space</literal> 'of'</entry>
<entry>Calcule le <emphasis>dernier</emphasis> jour de semaine du mois en cours.</entry>
<entry>"last sat of July 2008"</entry>
</row>
<row>
<entry><literal>number</literal> <literal>space</literal>? (<literal>unit</literal> | 'week')</entry>
<entry>Gère des temps relatifs dont la valeur est dénombrée.</entry>
<entry>"+5 weeks", "12 day", "-7 weekdays"</entry>
</row>
<row>
<entry>(<literal>ordinal</literal> | <literal>reltext</literal>) <literal>space</literal> <literal>unit</literal></entry>
<entry>Gère les éléments temporels relatifs dont la valeur est un texte.
<literal>last</literal> et <literal>previous</literal> sont équivalents à
<literal>-1</literal>, <literal>this</literal> à 0, et <literal>next</literal> à
<literal>+1</literal>.</entry>
<entry>"fifth day", "second month", "last day", "previous year"</entry>
</row>
<row>
<entry>'ago'</entry>
<entry>Utilise dans le passé toute description de temps relatif ('il y a').</entry>
<entry>"2 days ago", "8 days ago 14:00", "2 months 5 days ago", "2 months ago 5 days", "2 days ago"</entry>
</row>
<row>
<entry><literal>dayname</literal></entry>
<entry>Se déplace vers le prochain jour indiqué.(Voir <link
linkend="datetime.formats.relative.dayname-note">note</link>)</entry>
<entry>"Monday"</entry>
</row>
<row>
<entry><literal>reltext</literal> <literal>space</literal> 'week'</entry>
<entry>Gère le format spécial "weekday + last/this/next week".</entry>
<entry>"Monday next week"</entry>
</row>
</tbody>
</tgroup>
</table>
<note>
<para>
Les expressions relatives sont toujours traitées <emphasis>après</emphasis>
les expressions non relatives. Ceci fait en sorte que "+1 week july 2008" et "july
2008 +1 week" sont équivalents.
</para>
<para>
"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.
</para>
<para>
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 <function>DateTime::modify</function> ou
<function>DateTimeImmutable::modify</function>, le référent est l'objet
sur lequel la méthode <literal>modify()</literal> est appelée.
</para>
</note>
<note>
<para xml:id="datetime.formats.relative.dayname-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.
</para>
<orderedlist>
<listitem>
<simpara>
"<literal>dayname</literal>" n'avance <emphasis>pas</emphasis> vers un autre
jour. (Exemple : "Wed July 23rd, 2008" signifie "2008-07-23").
</simpara>
</listitem>
<listitem>
<simpara>
"<literal>number</literal> <literal>dayname</literal>" n'avance
<emphasis>pas</emphasis> vers un autre jour. (Exemple : "1
wednesday july 23rd, 2008" signifie "2008-07-23").
</simpara>
</listitem>
<listitem>
<simpara>
"<literal>number</literal> week <literal>dayname</literal>" ajoutera
d'abord le nombre de semaines, mais n'avancera <emphasis>pas</emphasis>
vers un autre jour. Dans ce cas "<literal>number</literal>
week" et "<literal>dayname</literal>" sont deux blocs distincts.
(Exemple : "+1 week wednesday july 23rd, 2008" signifie "2008-07-30").
</simpara>
</listitem>
<listitem>
<simpara>
"<literal>ordinal</literal> <literal>dayname</literal>"
<emphasis>avance</emphasis> vers un autre jour. (Exemple : "first
wednesday july 23rd, 2008" signifie "2008-07-30").
</simpara>
</listitem>
<listitem>
<simpara>
"<literal>number</literal> week <literal>ordinal</literal>
<literal>dayname</literal>" ajoutera d'abord le nombre de semaines
et ensuite <emphasis>avancera</emphasis> vers un autre jour.
Dans ce cas, "<literal>number</literal> week" et
"<literal>ordinal</literal> <literal>dayname</literal>" sont deux blocs
distincts. (Exemple : "+1 week first wednesday july 23rd,
2008" signifie "2008-08-06").
</simpara>
</listitem>
<listitem>
<simpara>
"<literal>ordinal</literal> <literal>dayname</literal> 'of' "
n'avance <emphasis>pas</emphasis> 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é).
</simpara>
</listitem>
</orderedlist>
<para>
Notez aussi que le "of" dans "<literal>ordinal</literal>
<literal>space</literal> <literal>dayname</literal>
<literal>space</literal> 'of' " et "'last' <literal>space</literal>
<literal>dayname</literal> <literal>espace</literal> 'of' " fait quelque
chose de spécial.
</para>
<orderedlist>
<listitem>
<simpara>
Il affecte le jour du mois à 1.
</simpara>
</listitem>
<listitem>
<simpara>
"<literal>ordinal</literal> <literal>dayname</literal> 'of' " n'avance
<emphasis>pas</emphasis> vers un autre jour. (Exemple : "first
tuesday of july 2008" signifie "2008-07-01").
</simpara>
</listitem>
<listitem>
<simpara>
"<literal>ordinal</literal> <literal>dayname</literal> "
<emphasis>avance</emphasis> 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).
</simpara>
</listitem>
<listitem>
<simpara>
"'last' <literal>dayname</literal> 'of' " prend le dernier
<literal>dayname</literal> du mois courant. (Exemple : "last
wed of july 2008" signifie "2008-07-30")
</simpara>
</listitem>
<listitem>
<simpara>
"'last' <literal>dayname</literal>" prend le dernier
<literal>dayname</literal> à 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").
</simpara>
</listitem>
</orderedlist>
</note>
<note>
<para>
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.
</para>
</note>
<note>
<para>
<literal>number</literal> est un nombre <emphasis>entier</emphasis> ; si un
nombre décimal est donné, le point (ou la virgule) sera probablement interprété
comme un délimiteur.
Par exemple, <literal>'+1.5 hours'</literal> sera analysé en tant que
<literal>'+1 5 hours'</literal>, et non pas comme <literal>'+1 hour +30 minutes'</literal>.
</para>
</note>
<sect2 role="changelog">
&reftitle.changelog;
<para>
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>8.2.0</entry>
<entry>
<literal>number</literal> n'accepte plus plusieurs signes,
exemple <literal>+-2</literal>.
</entry>
</row>
<row>
<entry>7.0.8</entry>
<entry>
Les semaines commencent toujours le lundi. Autrefois, le dimanche était
également considéré pour commencer une semaine.
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</para>
</sect2>
</sect1>
<!--}}}-->
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=marker fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->