Cálculos con fechas en PHP

Estoy realmente cansado de ver por ahí cálculos con fechas que están mal hechos.

Tradicionalmente si se quiere añadir un día a una fecha dada se hace lo siguiente:

Básicamente a una fecha en formato UNIX ($date1) añadimos los 86400 segundos que tiene un día. Esto es correcto salvo que estemos en una zona horaria con cambio de hora (DST), por eso ES INCORRECTO.

Para añadir un intervalo cualquiera a una fecha lo CORRECTO es hacer lo siguiente:

Utilizamos la función strtotime que convierte cualquier cadena de texto en un timestamp (tiempo UNIX). La única pega es que sólo entiende cadenas en inglés, por lo demás es muy útil:

En el ejemplo que antecede estas líneas he definido la zona horaria de Madrid que se  rige por DST que comienza el último domingo de marzo y termina el último domingo de octubre, después calculo dichas fechas diciéndole precisamente eso a strtotime.

Para calcular la diferencia entre dos fechas puede tentarnos hallar directamente la diferencia entre sus timestamps, por lo que tendríamos los segundos entre una fecha y otra… otra vez INCORRECTO. Para calcular diferencias entre fechas tenemos la función date_diff que es un alias de DateTime::diff.

Un ejemplo completo:

Y para ver el resultado: http://lab.fawno.com/code/dates.php

 

Share Button

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *