1
0
mirror of https://github.com/php/doc-es.git synced 2026-03-24 07:22:16 +01:00
Files
archived-doc-es/reference/datetime/formats.xml
2025-11-03 11:50:15 +01:00

1244 lines
43 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 3a8c3e77df070a046c9d5b56b68926ca2d7e5ee3 Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: no Maintainer: Marqitos -->
<chapter xml:id="datetime.formats" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Formatos soportados de tiempo y fechas</title>
<para>
Esta sección describe, en un formato de tipo BNF, todos los formatos diferentes
que el analizador de <classname>DateTimeImmutable</classname>,
<classname>DateTime</classname>, <function>date_create_immutable</function>,
<function>date_create</function>, <function>date_parse</function>, y
<function>strtotime</function> es capaz de comprender.
Los formatos están agrupados por secciones.
En la mayoría de los casos, los formatos de secciones diferentes, separados por
caracteres de espacio en blanco, comas o puntos, pueden ser utilizados en la misma cadena fecha/hora. Para cada formato soportado, se dan uno o varios ejemplos así como una descripción del formato correspondiente.
Los caracteres entre comillas simples para los formatos son insensibles a la mayúscula/minúscula (<literal>'t'</literal> podría escribirse <literal>t</literal> o <literal>T</literal>), los caracteres escritos entre comillas dobles, ellos, son sensibles a la mayúscula/minúscula (<literal>"T"</literal> y solo <literal>T</literal>).
</para>
<para>
Para formatear objetos <classname>DateTimeImmutable</classname> y
<classname>DateTime</classname>, por favor refiérase a la documentación
del método <function>DateTimeInterface::format</function>.
</para>
<para>
Un conjunto de reglas generales debería ser tenido en cuenta.
</para>
<orderedlist>
<listitem>
<simpara>
El analizador, permite a cada unidad (año, mes, día, hora, minuto, segundo)
el rango completo de valores. Para un año son solo 4 dígitos, para un
mes es 0-12, para un día 0-31 y para la hora y los minutos es 0-59.
</simpara>
</listitem>
<listitem>
<simpara>
60 es permitido para los segundos, ya que a veces cadenas de fechas con
este segundo intercalar aparecen. Pero PHP implementa el tiempo Unix
donde "60" no es un número de segundos válido y así overflow.
</simpara>
</listitem>
<listitem>
<simpara>
<function>strtotime</function> returns &false; si un número está fuera
del rango, y <function>DateTimeImmutable::__construct</function> lanza
una excepción.
</simpara>
</listitem>
<listitem>
<simpara>
Si una cadena contiene una fecha, todos los elementos son puestos a 0.
</simpara>
</listitem>
<listitem>
<simpara>
Todos los elementos de tiempo menos significativos son puestos a 0 si
cualquier elemento de un tiempo está presente en la cadena dada.
</simpara>
</listitem>
<listitem>
<simpara>
El analizador es tonto, y no efectúa verificación para hacerlo más rápido
(y más genérico).
</simpara>
</listitem>
<listitem>
<simpara>
Además de las reglas aplicables a los elementos temporales individuales,
el analizador comprende también
<link linkend="datetime.formats.compound">formatos compuestos</link> más
específicos, tales como el análisis de timestamps Unix (<literal>@1690388256</literal>)
y fechas semanales ISO (<literal>2008-W28-3</literal>).
</simpara>
</listitem>
<listitem>
<para>
Hay una verificación adicional si una fecha inválida es proporcionada:
<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>
Es ya posible manejar estos casos especiales, pero el uso de
<function>DateTimeImmutable::createFromFormat</function> es requerido
proporcionando el formato deseado.
<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>Formatos para los tiempos (Time)</title>
<para>
Esta página describe los diferentes formatos en una sintaxis de tipo BNF
que los analizadores de <classname>DateTimeImmutable</classname>,
<classname>DateTime</classname>, <function>date_create</function>,
<function>date_create_immutable</function>, y
<function>strtotime</function> comprenden.
</para>
<para>
Para formatear objetos <classname>DateTimeImmutable</classname> y
<classname>DateTime</classname>, por favor refiérase a la documentación
del método <function>DateTimeInterface::format</function>.
</para>
<table>
<title>Símbolos utilizados</title>
<tgroup cols="3">
<thead>
<row>
<entry>Descripción</entry>
<entry>Formats</entry>
<entry>Ejemplos</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>meridiem</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>espacio</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>Notación de 12 horas</title>
<tgroup cols="3">
<thead>
<row>
<entry>Descripción</entry>
<entry>Formato</entry>
<entry>Ejemplos</entry>
</row>
</thead>
<tbody>
<row>
<entry>Horas solas, con meridiem</entry>
<entry><literal>hh</literal> <literal>espacio</literal>? <literal>meridiem</literal></entry>
<entry>"4 am", "5PM"</entry>
</row>
<row>
<entry>Horas y minutos, con meridiem</entry>
<entry><literal>hh</literal> [.:] <literal>MM</literal> <literal>espacio</literal>? <literal>meridiem</literal></entry>
<entry>"4:08 am", "7:19P.M."</entry>
</row>
<row>
<entry>Horas, minutos y segundos con meridiem</entry>
<entry><literal>hh</literal> [.:] <literal>MM</literal> [.:] <literal>II</literal> <literal>espacio</literal>? <literal>meridiem</literal></entry>
<entry>"4:08:37 am", "7:19:19P.M."</entry>
</row>
<row>
<entry>MS SQL (Horas, minutos, segundos y fracción con meridiem)</entry>
<entry><literal>hh</literal> ":" <literal>MM</literal> ":" <literal>II</literal> [.:] [0-9]+ <literal>meridiem</literal></entry>
<entry>"4:08:39:12313am"</entry>
</row>
</tbody>
</tgroup>
</table>
<table>
<title>Notación de 24 horas</title>
<tgroup cols="3">
<thead>
<row>
<entry>Descripción</entry>
<entry>Formato</entry>
<entry>Ejemplos</entry>
</row>
</thead>
<tbody>
<row>
<entry>Horas y minutos</entry>
<entry>'t'? <literal>HH</literal> [.:] <literal>MM</literal></entry>
<entry>"04:08", "19.19", "T23:43"</entry>
</row>
<row>
<entry>Horas y minutos, sin dos puntos</entry>
<entry>'t'? <literal>HH</literal> <literal>MM</literal></entry>
<entry>"0408", "t1919", "T2343"</entry>
</row>
<row>
<entry>Horas, minutos y segundos</entry>
<entry>'t'? <literal>HH</literal> [.:] <literal>MM</literal> [.:] <literal>II</literal></entry>
<entry>"04.08.37", "t19:19:19"</entry>
</row>
<row>
<entry>Horas, minutos y segundos, sin dos puntos</entry>
<entry>'t'? <literal>HH</literal> <literal>MM</literal> <literal>II</literal></entry>
<entry>"040837", "T191919"</entry>
</row>
<row>
<entry>Horas, minutos, segundos y zona horaria</entry>
<entry>'t'? <literal>HH</literal> [.:] <literal>MM</literal> [.:] <literal>II</literal> <literal>espacio</literal>? ( <literal>tzcorrection</literal> | <literal>tz</literal> )</entry>
<entry>"040837CEST", "T191919-0700"</entry>
</row>
<row>
<entry>Horas, minutos, segundos y fracción</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>Información de zona horaria</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>Formatos de fechas</title>
<para>
Esta página describe los diferentes formatos en una sintaxis de tipo BNF
que los analizadores de <classname>DateTimeImmutable</classname>,
<classname>DateTime</classname>, <function>date_create</function>,
<function>date_create_immutable</function>, y
<function>strtotime</function> comprenden.
</para>
<para>
Para formatear objetos <classname>DateTimeImmutable</classname> y
<classname>DateTime</classname>, por favor refiérase a la documentación
del método <function>DateTimeInterface::format</function>.
</para>
<table>
<title>Símbolos utilizados</title>
<tgroup cols="3">
<thead>
<row>
<entry>Descripción</entry>
<entry>Formato</entry>
<entry>Ejemplos</entry>
</row>
</thead>
<tbody>
<row>
<entry><literal>sufijo de días</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>Formats estándar</title>
<tgroup cols="2">
<thead>
<row>
<entry>&Description;</entry>
<entry>Ejemplos</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>Notaciones localizadas</title>
<tgroup cols="3">
<thead>
<row>
<entry>Descripción</entry>
<entry>Formato</entry>
<entry>Ejemplos</entry>
</row>
</thead>
<tbody>
<row>
<entry>Mes americano y día</entry>
<entry><literal>mm</literal> "/" <literal>dd</literal></entry>
<entry>"5/12", "10/27"</entry>
</row>
<row>
<entry>Mes americano, día y año</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>Año de cuatro dígitos, mes y día con slashes</entry>
<entry><literal>YY</literal> "/" <literal>mm</literal> "/" <literal>dd</literal></entry>
<entry>"2008/6/30", "1978/12/22"</entry>
</row>
<row>
<entry>Año de cuatro dígitos y mes (GNU)</entry>
<entry><literal>YY</literal> "-" <literal>mm</literal></entry>
<entry>"2008-6", "2008-06", "1978-12"</entry>
</row>
<row>
<entry>Año, mes y día con guiones</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>Día, mes y año de dos dígitos, con puntos, tabulaciones o guiones</entry>
<entry><literal>dd</literal> [.\t-] <literal>mm</literal> [.-] <literal>YY</literal></entry>
<entry>"30-6-2008", "22.12.1978"</entry>
</row>
<row>
<entry>Día, mes y año de dos dígitos, con puntos o tabulaciones</entry>
<entry><literal>dd</literal> [.\t] <literal>mm</literal> "." <literal>yy</literal></entry>
<entry>"30.6.08", "22\t12.78"</entry>
</row>
<row>
<entry>Día, mes textual y año</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>Mes textual y año de cuatro dígitos (el día será el 1)</entry>
<entry><literal>m</literal> ([ \t.-])* <literal>YY</literal></entry>
<entry>"June 2008", "DEC1978", "March 1879"</entry>
</row>
<row>
<entry>Año de cuatro dígitos y mes textual (el día será el 1)</entry>
<entry><literal>YY</literal> ([ \t.-])* <literal>m</literal></entry>
<entry>"2008 June", "1978-XII", "1879.MArCH"</entry>
</row>
<row>
<entry>Mes textual, día y año</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>Mes textual y día</entry>
<entry><literal>m</literal> ([ .\t-])* <literal>dd</literal> [,.stndrh\t ]*</entry>
<entry>"July 1st,", "Apr 17", "May.9"</entry>
</row>
<row>
<entry>Día y mes textual</entry>
<entry><literal>dd</literal> ([ .\t-])* <literal>m</literal></entry>
<entry>"1 July", "17 Apr", "9.May"</entry>
</row>
<row>
<entry>Mes abreviado, día y año</entry>
<entry><literal>M</literal> "-" <literal>DD</literal> "-" <literal>y</literal></entry>
<entry>"May-09-78", "Apr-17-1790"</entry>
</row>
<row>
<entry>Año, mes abreviado y día</entry>
<entry><literal>y</literal> "-" <literal>M</literal> "-" <literal>DD</literal></entry>
<entry>"78-Dec-22", "1814-MAY-17"</entry>
</row>
<row>
<entry>Año (y solo el año)</entry>
<entry><literal>YY</literal></entry>
<entry>"1978", "2008"</entry>
</row>
<row>
<entry>Año (desarrollado, 5-19 dígitos con signo)</entry>
<entry>[+-] <literal>YYY</literal></entry>
<entry>"-81120", "+20192"</entry>
</row>
<row>
<entry>Mes textual (y solo el mes)</entry>
<entry><literal>m</literal></entry>
<entry>"March", "jun", "DEC"</entry>
</row>
</tbody>
</tgroup>
</table>
<table>
<title>Notaciones ISO8601</title>
<tgroup cols="3">
<thead>
<row>
<entry>Descripción</entry>
<entry>Formato</entry>
<entry>Ejemplos</entry>
</row>
</thead>
<tbody>
<row>
<entry>Año, mes y día de ocho dígitos</entry>
<entry><literal>YY</literal> <literal>MM</literal> <literal>DD</literal></entry>
<entry>"15810726", "19780417", "18140517"</entry>
</row>
<row>
<entry>Año de cuatro dígitos, mes y día con slashes</entry>
<entry><literal>YY</literal> "/" <literal>MM</literal> "/" <literal>DD</literal></entry>
<entry>"2008/06/30", "1978/12/22"</entry>
</row>
<row>
<entry>Año de dos dígitos, mes y día con guiones</entry>
<entry><literal>yy</literal> "-" <literal>MM</literal> "-" <literal>DD</literal></entry>
<entry>"08-06-30", "78-12-22"</entry>
</row>
<row>
<entry>Año de cuatro dígitos con signo opcional, mes y día</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>Año de cinco dígitos con signo, mes y día requeridos</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>
Para los formatos <literal>y</literal> y <literal>yy</literal>, los años
antes de 100 son considerados de una manera especial cuando los
símbolos <literal>y</literal> o <literal>yy</literal> son utilizados.
Si el año está entre 0 (inclusivo) y 69 (inclusivo),
2000 será añadido. Si el año está entre 70 (inclusivo) y
99 (inclusivo) entonces 1900 será añadido. Esto significa que "00-01-01" es
interpretado como "2000-01-01".
</para>
</note>
<note>
<para>
El formato "Día, mes y año de dos dígitos con tabulaciones o puntos"
(<literal>dd</literal> [.\t] <literal>mm</literal> "."
<literal>yy</literal>) solo funciona para valores de año de 61 (inclusivo)
a 99 (inclusivo) - fuera de estos límites, el <emphasis>formato de tiempo</emphasis>
"<literal>HH</literal> [.:] <literal>MM</literal> [.:] <literal>SS</literal>" tiene una
precedencia más fuerte y prima.
</para>
</note>
<note>
<para>
El formato "Año (y solo el año)" solo funciona de manera fiable si una cadena
de tiempo ya ha sido encontrada. De lo contrario, si el año de cuatro dígitos coincide
con <literal>HH</literal> <literal>MM</literal>, estos dos elementos de fecha
son definidos en su lugar.
</para>
<para>
Para analizar de manera coherente solo un año, utilice
<function>DateTimeImmutable::createFromFormat</function> con el
especificador <literal>Y</literal>.
</para>
</note>
<caution>
<para>
Es posible añadir o restar un préstamo para los formatos
<literal>dd</literal> y <literal>DD</literal>. El día 0 significa el último
día del mes anterior, los préstamos positivos contarán el mes siguiente.
Así, "2008-08-00" es equivalente a "2008-07-31" y "2008-06-31" es equivalente
a "2008-07-01" (junio solo tiene 30 días).
</para>
<para>
Es de notar que el rango de día está limitado a 0-31 como
indicado por la expresión regular anterior. Así, "2008-06-32" no es
una cadena de fecha válida, por ejemplo.
</para>
<para>
También es posible jugar con los préstamos de los formatos <literal>mm</literal> y
<literal>MM</literal> gracias al valor 0. Un valor de mes de 0 significa Diciembre
del año anterior. Por ejemplo "2008-00-22" es equivalente a "2007-12-22".
</para>
<para>
Si combina las dos nociones anteriores y utiliza un préstamo negativo en el día
y el mes, entonces ocurre esto: "2008-00-00" es convertido primero hacia
"2007-12-00" luego hacia "2007-11-30". Esto también ocurre con la cadena
"0000-00-00" que es entonces transformada hacia "-0001-11-30" (el año -1 en el calendario
ISO 8601, que es 2 BC en el calendario Gregoriano).
</para>
</caution>
</sect1>
<!--}}}-->
<!--Compound Formats: {{{-->
<sect1 annotations="chunk:false" xml:id="datetime.formats.compound">
<title>Formats compuestos</title>
<para>
Esta página describe los diferentes formatos en una sintaxis de tipo BNF que los analizadores de
<classname>DateTimeImmutable</classname>, <classname>DateTime</classname>,
<function>date_create</function>,
<function>date_create_immutable</function>, y
<function>strtotime</function> comprenden.
</para>
<para>
Para formatear objetos <classname>DateTimeImmutable</classname> y
<classname>DateTime</classname>, por favor refiérase a la documentación
del método <function>DateTimeInterface::format</function>.
</para>
<table>
<title>Símbolos utilizados</title>
<tgroup cols="3">
<thead>
<row>
<entry>Descripción</entry>
<entry>Formats</entry>
<entry>Ejemplos</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>meridiem</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>espacio</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" (segundo intercalar)</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>Notaciones localizadas</title>
<tgroup cols="3">
<thead>
<row>
<entry>Descripción</entry>
<entry>Formato</entry>
<entry>Ejemplos</entry>
</row>
</thead>
<tbody>
<row>
<entry>Formato de log común</entry>
<entry><literal>dd</literal> "/" <literal>M</literal> "/" <literal>YY</literal> : <literal>HH</literal> ":" <literal>II</literal> ":" <literal>SS</literal> <literal>espacio</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>Año ISO con semana ISO</entry>
<entry><literal>YY</literal> "-"? "W" <literal>W</literal></entry>
<entry>"2008W27", "2008-W28"</entry>
</row>
<row>
<entry>Año ISO con semana ISO y día</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: Año con día del año</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>Timestamp Unix</entry>
<entry>"@" "-"? [0-9]+</entry>
<entry>"@1215282385"</entry>
</row>
<row>
<entry>Timestamp Unix con microsegundos</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 (Compacto)</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>
El "W" en los formatos "Año ISO con semana ISO" y "Año ISO con semana ISO y día"
es sensible a la mayúscula/minúscula; solo puede utilizarse la mayúscula "W".
</para>
<para>
El "T" en los formatos SOAP, XMRPC y WDDX es sensible a la mayúscula/minúscula; utilice siempre
la mayúscula "T".
</para>
<para>
El formato timestamp Unix define la zona horaria a UTC.
</para>
</note>
</sect1>
<!--}}}-->
<!--Relative Formats: {{{-->
<sect1 annotations="chunk:false" xml:id="datetime.formats.relative">
<title>Formats relativos</title>
<para>
Esta página describe los diferentes formatos en una sintaxis de tipo BNF
que los analizadores de <classname>DateTimeImmutable</classname>,
<classname>DateTime</classname>, <function>date_create</function>,
<function>date_create_immutable</function>, y
<function>strtotime</function> comprenden.
</para>
<para>
Para formatear objetos <classname>DateTimeImmutable</classname> y
<classname>DateTime</classname>, por favor refiérase a la documentación
del método <function>DateTimeInterface::format</function>.
</para>
<table>
<title>Símbolos utilizados</title>
<tgroup cols="2">
<thead>
<row>
<entry>Descripción</entry>
<entry>Formato</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>espacio</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>Notaciones basadas en el día</title>
<tgroup cols="3">
<thead>
<row>
<entry>Formato</entry>
<entry>Descripción</entry>
<entry>Ejemplos</entry>
</row>
</thead>
<tbody>
<row>
<entry>'yesterday'</entry>
<entry>Medianoche de ayer</entry>
<entry>"yesterday 14:00"</entry>
</row>
<row>
<entry>'midnight'</entry>
<entry>El tiempo es puesto a 00:00:00</entry>
<entry></entry>
</row>
<row>
<entry>'today'</entry>
<entry>El tiempo es puesto a 00:00:00</entry>
<entry></entry>
</row>
<row>
<entry>'now'</entry>
<entry>Ahora</entry>
<entry></entry>
</row>
<row>
<entry>'noon'</entry>
<entry>El tiempo es puesto a 12:00:00</entry>
<entry>"yesterday noon"</entry>
</row>
<row>
<entry>'tomorrow'</entry>
<entry>Medianoche de mañana</entry>
<entry></entry>
</row>
<row>
<entry>'back of' <literal>hour</literal></entry>
<entry>15 minutos antes de la hora especificada</entry>
<entry>"back of 7pm", "back of 15"</entry>
</row>
<row>
<entry>'front of' <literal>hour</literal></entry>
<entry>15 minutos después de la hora especificada</entry>
<entry>"front of 5am", "front of 23"</entry>
</row>
<row>
<entry>'first day of'?</entry>
<entry>Asigna el día del primer día del mes actual. Generalmente es preferible
utilizar esta expresión con el nombre del mes que sigue, ya que solo se refiere al mes actual.</entry>
<entry>"first day of January 2008"</entry>
</row>
<row>
<entry>'last day of'?</entry>
<entry>Asigna el día del último día del mes actual. Generalmente es preferible
utilizar esta expresión con el nombre del mes que sigue, ya que solo se refiere al mes actual.</entry>
<entry>"last day of next month"</entry>
</row>
<row>
<entry><literal>ordinal</literal> <literal>espacio</literal> <literal>dayname</literal> <literal>espacio</literal> 'of'</entry>
<entry>Calcula el <literal>x</literal>-ésimo día de la semana del mes actual.</entry>
<entry>"first sat of July 2008"</entry>
</row>
<row>
<entry>'last' <literal>espacio</literal> <literal>dayname</literal> <literal>espacio</literal> 'of'</entry>
<entry>Calcula el <emphasis>último</emphasis> día de la semana del mes actual.</entry>
<entry>"last sat of July 2008"</entry>
</row>
<row>
<entry><literal>number</literal> <literal>espacio</literal>? (<literal>unit</literal> | 'week')</entry>
<entry>Maneja tiempos relativos cuyo valor es numerado.</entry>
<entry>"+5 weeks", "12 day", "-7 weekdays"</entry>
</row>
<row>
<entry>(<literal>ordinal</literal> | <literal>reltext</literal>) <literal>espacio</literal> <literal>unit</literal></entry>
<entry>Maneja elementos temporales relativos cuyo valor es textual.
<literal>last</literal> y <literal>previous</literal> son equivalentes a
<literal>-1</literal>, <literal>this</literal> a 0, y <literal>next</literal> a
<literal>+1</literal>.</entry>
<entry>"fifth day", "second month", "last day", "previous year"</entry>
</row>
<row>
<entry>'ago'</entry>
<entry>Utiliza en el pasado cualquier descripción de tiempo relativo ('hace').</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 mueve hacia el próximo día indicado.(Ver <link
linkend="datetime.formats.relative.dayname-note">nota</link>)</entry>
<entry>"Monday"</entry>
</row>
<row>
<entry><literal>reltext</literal> <literal>espacio</literal> 'week'</entry>
<entry>Maneja el formato especial "weekday + last/this/next week".</entry>
<entry>"Monday next week"</entry>
</row>
</tbody>
</tgroup>
</table>
<note>
<para>
Las expresiones relativas son siempre tratadas <emphasis>después</emphasis>
de las expresiones no relativas. Esto hace que "+1 week july 2008" y "july
2008 +1 week" sean equivalentes.
</para>
<para>
"yesterday", "midnight", "today", "noon" y "tomorrow" son excepciones a esta
regla. Note que "tomorrow 11:00" y "11:00 tomorrow" son diferentes. Si la fecha
de hoy es "July 23rd, 2008", la primera expresión da "2008-07-24 11:00"
mientras que la segunda dará "2008-07-24 00:00". La razón es que estas cinco expresiones
influyen directamente en la fecha actual.
</para>
<para>
Las palabras clave como "first day of" dependen del contexto en el cual
la cadena de formato relativo es utilizada. Si se utiliza con un método
estático o una función, el referente es el timestamp actual del sistema.
Sin embargo, si se utiliza en <function>DateTime::modify</function> o
<function>DateTimeImmutable::modify</function>, el referente es el objeto
sobre el cual el método <literal>modify()</literal> es llamado.
</para>
</note>
<note>
<para xml:id="datetime.formats.relative.dayname-note">
Note las observaciones que siguen cuando el día de la semana actual es el mismo que el
día de la semana utilizado en la cadena fecha/hora. El día de la semana actual podría haber sido
recalculado con respecto a las partes no relativas de la cadena fecha/hora.
</para>
<orderedlist>
<listitem>
<simpara>
"<literal>dayname</literal>" no avanza <emphasis>hacia</emphasis> otro
día. (Ejemplo: "Wed July 23rd, 2008" significa "2008-07-23").
</simpara>
</listitem>
<listitem>
<simpara>
"<literal>number</literal> <literal>dayname</literal>" no avanza
<emphasis>hacia</emphasis> otro día. (Ejemplo: "1
wednesday july 23rd, 2008" significa "2008-07-23").
</simpara>
</listitem>
<listitem>
<simpara>
"<literal>number</literal> week <literal>dayname</literal>" añadirá
primero el número de semanas, pero no avanzará <emphasis>hacia</emphasis>
otro día. En este caso "<literal>number</literal>
week" y "<literal>dayname</literal>" son dos bloques distintos.
(Ejemplo: "+1 week wednesday july 23rd, 2008" significa "2008-07-30").
</simpara>
</listitem>
<listitem>
<simpara>
"<literal>ordinal</literal> <literal>dayname</literal>"
<emphasis>avanza</emphasis> hacia otro día. (Ejemplo: "first
wednesday july 23rd, 2008" significa "2008-07-30").
</simpara>
</listitem>
<listitem>
<simpara>
"<literal>number</literal> week <literal>ordinal</literal>
<literal>dayname</literal>" añadirá primero el número de semanas
y luego <emphasis>avanzará</emphasis> hacia otro día.
En este caso, "<literal>number</literal> week" y
"<literal>ordinal</literal> <literal>dayname</literal>" son dos bloques
distintos. (Ejemplo: "+1 week first wednesday july 23rd,
2008" significa "2008-08-06").
</simpara>
</listitem>
<listitem>
<simpara>
"<literal>ordinal</literal> <literal>dayname</literal> 'of' "
no avanza <emphasis>hacia</emphasis> otro día. (Ejemplo:
"first wednesday of july 23rd, 2008" significa "2008-07-02" ya que la frase
con 'of' resetea el día del mes hacia '1' y el '23' será ignorado).
</simpara>
</listitem>
</orderedlist>
<para>
Note también que el "of" en "<literal>ordinal</literal>
<literal>espacio</literal> <literal>dayname</literal>
<literal>espacio</literal> 'of' " y "'last' <literal>espacio</literal>
<literal>dayname</literal> <literal>espacio</literal> 'of' " hace algo especial.
</para>
<orderedlist>
<listitem>
<simpara>
Asigna el día del mes a 1.
</simpara>
</listitem>
<listitem>
<simpara>
"<literal>ordinal</literal> <literal>dayname</literal> 'of' " no avanza
<emphasis>hacia</emphasis> otro día. (Ejemplo: "first
tuesday of july 2008" significa "2008-07-01").
</simpara>
</listitem>
<listitem>
<simpara>
"<literal>ordinal</literal> <literal>dayname</literal> "
<emphasis>avanza</emphasis> hacia otro día. (Ejemplo: "first
tuesday july 2008" significa "2008-07-08", ver también el punto número
4 de la lista anterior).
</simpara>
</listitem>
<listitem>
<simpara>
"'last' <literal>dayname</literal> 'of' " toma el último
<literal>dayname</literal> del mes actual. (Ejemplo: "last
wed of july 2008" significa "2008-07-30")
</simpara>
</listitem>
<listitem>
<simpara>
"'last' <literal>dayname</literal>" toma el último
<literal>dayname</literal> a partir del día actual. (Ejemplo: "last
wed july 2008" significa "2008-06-25"; "july 2008" asigna primero la fecha actual
a "2008-07-01" y luego "last wed" retrocede al último miércoles que es el
"2008-06-25").
</simpara>
</listitem>
</orderedlist>
</note>
<note>
<para>
Los valores relativos de los meses calculados se basan en el número de días de los meses que
se utilizan. Por ejemplo, "+2 month 2011-11-30", dará como resultado la fecha "2012-01-30".
Esto se debe a que el mes de noviembre tiene 30 días, y
que el mes de diciembre tiene 31, lo que suma un total de 61 días.
</para>
</note>
<note>
<para>
<literal>number</literal> es un número <emphasis>entero</emphasis>; si un
número decimal es dado, el punto (o la coma) será probablemente interpretado
como un delimitador.
Por ejemplo, <literal>'+1.5 hours'</literal> será analizado como
<literal>'+1 5 hours'</literal>, y no como <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.4.0</entry>
<entry>
<literal>number</literal> ahora acepta un signo más seguido de un
signo menos, por ejemplo <literal>+-2</literal>, y otras combinaciones
de varios signos.
</entry>
</row>
<row>
<entry>8.2.0</entry>
<entry>
<literal>number</literal> ya no acepta un signo más seguido de un
signo menos, ejemplo <literal>+-2</literal>.
</entry>
</row>
<row>
<entry>7.0.8</entry>
<entry>
Las semanas siempre comienzan el lunes. Antes, el domingo también era
considerado para comenzar una semana.
</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
-->