<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/datetime.examples.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'es',
  ),
  'this' => 
  array (
    0 => 'datetime.examples-arithmetic.php',
    1 => 'Aritm&eacute;tica con DateTime',
    2 => 'Aritm&eacute;tica con DateTime',
  ),
  'up' => 
  array (
    0 => 'datetime.examples.php',
    1 => 'Ejemplos',
  ),
  'prev' => 
  array (
    0 => 'datetime.examples.php',
    1 => 'Ejemplos',
  ),
  'next' => 
  array (
    0 => 'class.datetime.php',
    1 => 'DateTime',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    'path' => 'reference/datetime/examples.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="datetime.examples-arithmetic" class="section">
  <h2 class="title">Aritmética con DateTime</h2>
  <p class="para">
   Los ejemplos siguientes muestran algunos problemas de la aritmética de DateTime en lo que respecta
   a las transiciones DST y los meses con diferente número de días.
  </p>
  <div class="example" id="example-1">
   <p><strong>Ejemplo #1 DateTimeImmutable::add/sub añadir un intervalo de tiempo transcurrido</strong></p>
   <div class="example-contents"><p>
    Añadir PT24H más allá de una transición DST parecerá añadir 23/25 horas
    (para la mayoría de los husos horarios).
   </p></div>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
$dt </span><span style="color: #007700">= new </span><span style="color: #0000BB">DateTimeImmutable</span><span style="color: #007700">(</span><span style="color: #DD0000">"2015-11-01 00:00:00"</span><span style="color: #007700">, new </span><span style="color: #0000BB">DateTimeZone</span><span style="color: #007700">(</span><span style="color: #DD0000">"America/New_York"</span><span style="color: #007700">));
echo </span><span style="color: #DD0000">"Inicio: "</span><span style="color: #007700">, </span><span style="color: #0000BB">$dt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">format</span><span style="color: #007700">(</span><span style="color: #DD0000">"Y-m-d H:i:s P"</span><span style="color: #007700">), </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;
</span><span style="color: #0000BB">$dt </span><span style="color: #007700">= </span><span style="color: #0000BB">$dt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">add</span><span style="color: #007700">(new </span><span style="color: #0000BB">DateInterval</span><span style="color: #007700">(</span><span style="color: #DD0000">"PT3H"</span><span style="color: #007700">));
echo </span><span style="color: #DD0000">"Fin:    "</span><span style="color: #007700">, </span><span style="color: #0000BB">$dt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">format</span><span style="color: #007700">(</span><span style="color: #DD0000">"Y-m-d H:i:s P"</span><span style="color: #007700">), </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;</span></code></pre></div>
   </div>

   <div class="example-contents"><p>El ejemplo anterior mostrará:</p></div>
   <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Inicio: 2015-11-01 00:00:00 -04:00
Fin:    2015-11-01 02:00:00 -05:00
</pre></div>
   </div>
  </div>
  <div class="example" id="example-2">
   <p><strong>Ejemplo #2 DateTimeImmutable::modify y strtotime incrementar o decrementar valores individuales</strong></p>
   <div class="example-contents"><p>
    Añadir +24 horas más allá de una transición DST puede añadir exactamente 24
    horas como se ve con la cadena fecha/hora
    (excepto si la hora de inicio o fin está en un punto de transición).
   </p></div>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
$dt </span><span style="color: #007700">= new </span><span style="color: #0000BB">DateTimeImmutable</span><span style="color: #007700">(</span><span style="color: #DD0000">"2015-11-01 00:00:00"</span><span style="color: #007700">, new </span><span style="color: #0000BB">DateTimeZone</span><span style="color: #007700">(</span><span style="color: #DD0000">"America/New_York"</span><span style="color: #007700">));
echo </span><span style="color: #DD0000">"Inicio: "</span><span style="color: #007700">, </span><span style="color: #0000BB">$dt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">format</span><span style="color: #007700">(</span><span style="color: #DD0000">"Y-m-d H:i:s P"</span><span style="color: #007700">), </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;
</span><span style="color: #0000BB">$dt </span><span style="color: #007700">= </span><span style="color: #0000BB">$dt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">modify</span><span style="color: #007700">(</span><span style="color: #DD0000">"+24 hours"</span><span style="color: #007700">);
echo </span><span style="color: #DD0000">"Fin:    "</span><span style="color: #007700">, </span><span style="color: #0000BB">$dt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">format</span><span style="color: #007700">(</span><span style="color: #DD0000">"Y-m-d H:i:s P"</span><span style="color: #007700">), </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;</span></code></pre></div>
   </div>

   <div class="example-contents"><p>El ejemplo anterior mostrará:</p></div>
   <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Inicio: 2015-11-01 00:00:00 -04:00
Fin:    2015-11-02 00:00:00 -05:00
</pre></div>
   </div>
  </div>
  <div class="example" id="example-3">
   <p><strong>Ejemplo #3 DateInterval::createFromDateString crea intervalos que incrementan o decrementan los valores de cada componente</strong></p>
   <div class="example-contents"><p>
    <span class="methodname"><a href="dateinterval.createfromdatestring.php" class="methodname">DateInterval::createFromDateString()</a></span> utiliza el
    analizador de fecha/hora, y la parte horaria del intervalo resultante
    incrementa o decrementa los valores de cada componente. Para un intervalo
    creado con <span class="methodname"><a href="dateinterval.construct.php" class="methodname">DateInterval::__construct()</a></span> la parte
    horaria representa en cambio tiempo transcurrido, de modo que ambos no son
    intercambiables cuando una transición de zona horaria cae dentro de esa
    parte horaria. La parte de fecha se aplica de la misma forma en ambos
    casos, por lo que <code class="literal">P1D</code> y <code class="literal">1 day</code> dan
    siempre el mismo resultado.
   </p></div>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
$dt </span><span style="color: #007700">= new </span><span style="color: #0000BB">DateTimeImmutable</span><span style="color: #007700">(</span><span style="color: #DD0000">"2015-11-01 00:00:00"</span><span style="color: #007700">, new </span><span style="color: #0000BB">DateTimeZone</span><span style="color: #007700">(</span><span style="color: #DD0000">"America/New_York"</span><span style="color: #007700">));
echo </span><span style="color: #DD0000">"Inicio:   "</span><span style="color: #007700">, </span><span style="color: #0000BB">$dt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">format</span><span style="color: #007700">(</span><span style="color: #DD0000">"Y-m-d H:i:s P"</span><span style="color: #007700">), </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;
echo </span><span style="color: #DD0000">"PT24H:    "</span><span style="color: #007700">, </span><span style="color: #0000BB">$dt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">add</span><span style="color: #007700">(new </span><span style="color: #0000BB">DateInterval</span><span style="color: #007700">(</span><span style="color: #DD0000">"PT24H"</span><span style="color: #007700">))-&gt;</span><span style="color: #0000BB">format</span><span style="color: #007700">(</span><span style="color: #DD0000">"Y-m-d H:i:s P"</span><span style="color: #007700">), </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;
echo </span><span style="color: #DD0000">"24 hours: "</span><span style="color: #007700">, </span><span style="color: #0000BB">$dt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">add</span><span style="color: #007700">(</span><span style="color: #0000BB">DateInterval</span><span style="color: #007700">::</span><span style="color: #0000BB">createFromDateString</span><span style="color: #007700">(</span><span style="color: #DD0000">"24 hours"</span><span style="color: #007700">))-&gt;</span><span style="color: #0000BB">format</span><span style="color: #007700">(</span><span style="color: #DD0000">"Y-m-d H:i:s P"</span><span style="color: #007700">), </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;</span></code></pre></div>
   </div>

   <div class="example-contents"><p>El ejemplo anterior mostrará:</p></div>
   <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Inicio:   2015-11-01 00:00:00 -04:00
PT24H:    2015-11-01 23:00:00 -05:00
24 hours: 2015-11-02 00:00:00 -05:00
</pre></div>
   </div>
  </div>
  <div class="example" id="example-4">
   <p><strong>Ejemplo #4 La adición o sustracción de fechas/horas puede exceder
    (en más o en menos) fechas</strong></p>
   <div class="example-contents"><p>
    Como para 31 de Enero + 1 mes dará como resultado 2 de Marzo (año bisiesto) o
    3 de Marzo (año normal).
   </p></div>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
</span><span style="color: #007700">echo </span><span style="color: #DD0000">"Año normal:\n"</span><span style="color: #007700">; </span><span style="color: #FF8000">// febrero tiene 28 días
</span><span style="color: #0000BB">$dt </span><span style="color: #007700">= new </span><span style="color: #0000BB">DateTimeImmutable</span><span style="color: #007700">(</span><span style="color: #DD0000">"2015-01-31 00:00:00"</span><span style="color: #007700">, new </span><span style="color: #0000BB">DateTimeZone</span><span style="color: #007700">(</span><span style="color: #DD0000">"America/New_York"</span><span style="color: #007700">));
echo </span><span style="color: #DD0000">"Inicio: "</span><span style="color: #007700">, </span><span style="color: #0000BB">$dt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">format</span><span style="color: #007700">(</span><span style="color: #DD0000">"Y-m-d H:i:s P"</span><span style="color: #007700">), </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;
</span><span style="color: #0000BB">$dt </span><span style="color: #007700">= </span><span style="color: #0000BB">$dt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">modify</span><span style="color: #007700">(</span><span style="color: #DD0000">"+1 month"</span><span style="color: #007700">);
echo </span><span style="color: #DD0000">"Fin:    "</span><span style="color: #007700">, </span><span style="color: #0000BB">$dt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">format</span><span style="color: #007700">(</span><span style="color: #DD0000">"Y-m-d H:i:s P"</span><span style="color: #007700">), </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;

echo </span><span style="color: #DD0000">"Año bisiesto:\n"</span><span style="color: #007700">; </span><span style="color: #FF8000">// febrero tiene 29 días
</span><span style="color: #0000BB">$dt </span><span style="color: #007700">= new </span><span style="color: #0000BB">DateTimeImmutable</span><span style="color: #007700">(</span><span style="color: #DD0000">"2016-01-31 00:00:00"</span><span style="color: #007700">, new </span><span style="color: #0000BB">DateTimeZone</span><span style="color: #007700">(</span><span style="color: #DD0000">"America/New_York"</span><span style="color: #007700">));
echo </span><span style="color: #DD0000">"Inicio: "</span><span style="color: #007700">, </span><span style="color: #0000BB">$dt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">format</span><span style="color: #007700">(</span><span style="color: #DD0000">"Y-m-d H:i:s P"</span><span style="color: #007700">), </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;
</span><span style="color: #0000BB">$dt </span><span style="color: #007700">= </span><span style="color: #0000BB">$dt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">modify</span><span style="color: #007700">(</span><span style="color: #DD0000">"+1 month"</span><span style="color: #007700">);
echo </span><span style="color: #DD0000">"Fin:    "</span><span style="color: #007700">, </span><span style="color: #0000BB">$dt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">format</span><span style="color: #007700">(</span><span style="color: #DD0000">"Y-m-d H:i:s P"</span><span style="color: #007700">), </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;</span></code></pre></div>
   </div>

   <div class="example-contents"><p>El ejemplo anterior mostrará:</p></div>
   <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Año normal:
Inicio: 2015-01-31 00:00:00 -05:00
Fin:    2015-03-03 00:00:00 -05:00
Año bisiesto:
Inicio: 2016-01-31 00:00:00 -05:00
Fin:    2016-03-02 00:00:00 -05:00
</pre></div>
   </div>
   <div class="example-contents"><p>
    Para obtener el último día del mes próximo (es decir, para prever el
    excedente), el formato <code class="literal">last day of</code> está disponible.
   </p></div>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
</span><span style="color: #007700">echo </span><span style="color: #DD0000">"Año normal:\n"</span><span style="color: #007700">; </span><span style="color: #FF8000">// febrero tiene 28 días
</span><span style="color: #0000BB">$dt </span><span style="color: #007700">= new </span><span style="color: #0000BB">DateTimeImmutable</span><span style="color: #007700">(</span><span style="color: #DD0000">"2015-01-31 00:00:00"</span><span style="color: #007700">, new </span><span style="color: #0000BB">DateTimeZone</span><span style="color: #007700">(</span><span style="color: #DD0000">"America/New_York"</span><span style="color: #007700">));
echo </span><span style="color: #DD0000">"Inicio: "</span><span style="color: #007700">, </span><span style="color: #0000BB">$dt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">format</span><span style="color: #007700">(</span><span style="color: #DD0000">"Y-m-d H:i:s P"</span><span style="color: #007700">), </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;
</span><span style="color: #0000BB">$dt </span><span style="color: #007700">= </span><span style="color: #0000BB">$dt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">modify</span><span style="color: #007700">(</span><span style="color: #DD0000">"last day of next month"</span><span style="color: #007700">);
echo </span><span style="color: #DD0000">"Fin:    "</span><span style="color: #007700">, </span><span style="color: #0000BB">$dt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">format</span><span style="color: #007700">(</span><span style="color: #DD0000">"Y-m-d H:i:s P"</span><span style="color: #007700">), </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;

echo </span><span style="color: #DD0000">"Año bisiesto:\n"</span><span style="color: #007700">; </span><span style="color: #FF8000">// febrero tiene 29 días
</span><span style="color: #0000BB">$dt </span><span style="color: #007700">= new </span><span style="color: #0000BB">DateTimeImmutable</span><span style="color: #007700">(</span><span style="color: #DD0000">"2016-01-31 00:00:00"</span><span style="color: #007700">, new </span><span style="color: #0000BB">DateTimeZone</span><span style="color: #007700">(</span><span style="color: #DD0000">"America/New_York"</span><span style="color: #007700">));
echo </span><span style="color: #DD0000">"Inicio: "</span><span style="color: #007700">, </span><span style="color: #0000BB">$dt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">format</span><span style="color: #007700">(</span><span style="color: #DD0000">"Y-m-d H:i:s P"</span><span style="color: #007700">), </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;
</span><span style="color: #0000BB">$dt </span><span style="color: #007700">= </span><span style="color: #0000BB">$dt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">modify</span><span style="color: #007700">(</span><span style="color: #DD0000">"last day of next month"</span><span style="color: #007700">);
echo </span><span style="color: #DD0000">"Fin:    "</span><span style="color: #007700">, </span><span style="color: #0000BB">$dt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">format</span><span style="color: #007700">(</span><span style="color: #DD0000">"Y-m-d H:i:s P"</span><span style="color: #007700">), </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;</span></code></pre></div>
   </div>

   <div class="example-contents"><p>El ejemplo anterior mostrará:</p></div>
   <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Año normal:
Inicio: 2015-01-31 00:00:00 -05:00
Fin:    2015-02-28 00:00:00 -05:00
Año bisiesto:
Inicio: 2016-01-31 00:00:00 -05:00
Fin:    2016-02-29 00:00:00 -05:00
</pre></div>
   </div>
  </div>
 </div><?php manual_footer($setup); ?>