informaticaPC

Tutorial de PHP

Manejo de fechas en PHP, zonas horarias, hora universal UTC y GMT


Regístrate

Tus datos no serán compartidos, solo nosotros te enviaremos información y novedades

Obtener fecha y hora en PHP

La función date() nos devolverá una cadena de texto con la fecha en el formato que especifiquemos: si la usamos sin parámetros devolverá la fecha y hora actuales (según la zona horaria configurada en el servidor web) aunque también podemos indicar otra diferente como segundo parámetro opcional (el número de segundos, en formato UNIX).

Para ver las opciones de formato de fecha que se pueden usar con date() consulta el enlace sobre dicha función de PHP al final de este apartado.

Otras funciones útiles son time() que nos devolverá la hora actual en formato UNIX y mktime(), que nos devolverá una determinada fecha también en dicho formato.

Como parámetros se le pasan: hora, minuto, segundo, mes (entre 1 y 12), día y año.

Si en mktime() introducimos cero como valor del parámetro día se tomará el último día del mes anterior, y si introducimos cero como valor del parámetro mes se tomará el mes anterior.

Si lo que necesitamos es convertir una cadena de texto en formato fecha a formato UNIX, usaremos la función strtotime().

<?php
    echo date("Y")."<br />";
    echo date("d M y")."<br />";
    echo date("d/m/Y")."<p />";

    echo date("d/m/Y h:i:s")."<br />";
    echo date("H:i:s")."<p />";

    echo mktime(20 ,21, 22, 6, 14, 2011)."<br />";
    echo date("d/m/Y", mktime(20 ,21, 22, 6, 14, 2011))."<br />";
    echo date("d/m/Y", 1308079282)."<p />";

    echo strtotime( "2011-10-22" )."<br />";
    echo strtotime( "2011/10/22 20:30:05" )."<br />";
?>

Descargar ejemplo

Fecha en PHP

También disponemos de getdate() y date_parse() que devuelven un array asociativo con la fecha y hora descompuesta. A getdate() podemos indicarle como parámetro una fecha en formato UNIX:

<?php
    print_r( getdate() );
    echo "<p />";
    print_r( getdate(mktime(20 ,21, 22, 6, 14, 2011)) );
    echo "<p />";
    print_r( date_parse("2011-06-14 20:21:22") );
?>

Descargar ejemplo

Comprobar fecha

Para mostrar una fecha con formato podemos utilizar también la función de PHP strftime(), pudiendo ser necesario definir la zona horaria con date_default_timezone_set():

<?php
    date_default_timezone_set('Europe/Madrid');

    echo "Ahora 'date_default_timezone_set()' es: ".date_default_timezone_get()."<br />";
    echo "Fecha (Zona horaria UTC+1): ".strftime("%A, %d de %B del %Y - %H:%M:%S")."<p />";

    date_default_timezone_set('Europe/London');

    echo "Ahora 'date_default_timezone_set()' es: ".date_default_timezone_get()."<br />";
    echo "Fecha (Zona horaria UTC+0): ".strftime("%A, %d de %B del %Y - %H:%M:%S");
?>

Descargar ejemplo

Convertir fecha a texto

Más información

Vea también: [ date() ] - [ time() ] - [ mktime() ] - [ strtotime() ] - [ getdate() ] - [ date_parse() ] - [ strftime() ]

Información

Si vas a pasar una fecha en formato UNIX desde JavaScript hacia PHP usando AJAX ten en cuenta que JavaScript las trata con milisegundos en lugar de con segundos, por lo que habría que dividir el número entre 1000, mientras que para pasarla desde PHP hacia JavaScript habría que multiplicar por la misma cantidad.

Hora universal UTC o GMT

Como hemos visto, la función date() nos devolverá la fecha y hora local en la que se encuentra el servidor web (a no ser que esté configurado para otra zona horaria): lo ideal es que trabajemos con la hora universal UTC/GMT cuando la página web es accesible desde diferentes partes del mundo, y por alguna razón necesitamos tener en cuenta una fecha y hora global.

Para obtener la fecha y hora GMT/UTC utilizaremos la función de PHP gmdate().

Sin embargo, también es posible cambiar la zona horaria temporalmente durante la ejecución de un determinado script en PHP utilizando la función date_default_timezone_set().

En el siguiente ejemplo puedes ver la diferencia horaria entre nuestro servidor web y la hora universal UTC/GMT:

<?php
    echo "Fecha del servidor: [".date("d/m/Y H:i:s")."]<br />";
    echo "Fecha UTC: [".gmdate("d/m/Y H:i:s")."]<p />";

    date_default_timezone_set('UTC');

    echo "Fecha del servidor: [".date("d/m/Y H:i:s")."]<br />";
    echo "Fecha UTC: [".gmdate("d/m/Y H:i:s")."]";
?>

Descargar ejemplo

Fecha UTC o GMT en PHP

Del mismo modo que con date(), también podemos usar gmdate() con una fecha determinada:

<?php
    // Devuelve: "Fecha y hora del servidor: [14/06/2011 19:06:22]":
    echo "Fecha y hora del servidor: [".date("d/m/Y H:i:s", 1308079282)."]<br />";

    // Devuelve: "Fecha y hora UTC: [14/06/2011 19:06:22]"
    echo "Fecha y hora UTC: [".gmdate("d/m/Y H:i:s", 1308079282)."]<p />";
?>

Descargar ejemplo

Fecha UTC o GMT

NOTA: las horas devueltas variarán dependiendo de la zona horaria en que se encuentre el servidor web que utilices para procesar el ejemplo.

Finalmente, disponemos también de la función gmmktime() la cual es similar a mktime() vista en el apartado anterior con la única diferencia de que devuelve la fecha en formato UNIX a partir de la hora universal GMT/UTC:

<?php
    echo "Fecha y hora del servidor: [".mktime(20 ,21, 22, 6, 14, 2011)."]<br />";
    echo "Fecha y hora UTC: [".gmmktime(20 ,21, 22, 6, 14, 2011)."]<p />";

    // Definimos la zona horaria del servidor como UTC:
    date_default_timezone_set('UTC');

    // Ahora ambos valores devueltos serán iguales:
    echo "Fecha y hora del servidor: [".mktime(20 ,21, 22, 6, 14, 2011)."]<br />";
    echo "Fecha y hora UTC: [".gmmktime(20 ,21, 22, 6, 14, 2011);
?>

Descargar ejemplo

Fecha UTC o GMT

NOTA: En la primera llamada a mktime() del ejemplo, la hora devuelta dependerá de la zona horaria en que se encuentre el servidor web que utilices para procesar el ejemplo.

Más información

Vea también: [ date() ] - [ gmdate() ] - [ date_default_timezone_set() ] - [ gmmktime() ]

Información

Los formatos horarios UTC y GMT tienen los mismos valores, por lo tanto es lo mismo decir UTC+2 que GMT+2, por ejemplo. La diferencia entre ellas es la forma que usan para calcular el tiempo, siendo más preciso UTC.

Información

Puedes averiguar cuál es tu zona horaria desde este enlace.

Comprobar si una fecha es válida

La función de PHP checkdate() tras pasársele como parámetros el mes (entre 1 y 12), día y año (por este orden) nos devolverá true si la fecha construida a partir de ellos es válida, o bien false en caso contrario. Se tienen en cuenta los años bisiestos.

<?php
    if( checkdate(1, 28, 2011) == true )
        echo "La fecha es válida<br />";
    else
        echo "La fecha NO es válida<br />";

    if( checkdate(2, 29, 2011) == true )
        echo "La fecha es válida<br />";
    else
        echo "La fecha NO es válida<br />";

    if( checkdate(2, 29, 2012) == true )
        echo "La fecha es válida<br />";
    else
        echo "La fecha NO es válida<br />";
?>

Descargar ejemplo

Comprobar fecha en PHP

Más información

Vea también: [ checkdate() ]

Sumar y restar fechas en PHP

Para sumar o restar fechas debemos obtener el número de segundos transcurridos desde las 12 de la madrugada del 1 de enero de 1970 (formato horario UTC), y a continuación realizar la operación deseada.

A la hora de realizar cálculos hemos de tener en cuenta que:

  • 1 minuto -> = 60 segundos.
  • 1 hora -> 60 * 60 = 3.600 segundos.
  • 1 día -> 24 * 3.600 = 86.400 segundos.

Veamos unos ejemplos:

<?php
    // 10/04/2011 - 15:00:00
    $fecha = mktime(15, 0, 0, 4, 10, 2011);

    // Sumar 1 día y 2 horas
    $fecha = $fecha + 86400 + 7200;

    echo "Fecha: 10/04/2011 15:00:00<br/>";
    echo "Sumar 2 horas: ".date("d/m/Y H:i:s", $fecha)."<p />";

    // Restar media hora
    $fecha = $fecha - 1800;

    echo "Fecha: 11/04/2011 17:00:00<br/>";
    echo "Restar media hora: ".date("d/m/Y H:i:s", $fecha)."<p />";

    // Sumar 30 días:
    $fecha = $fecha + 30 * 86400;

    echo "Fecha: 11/04/2011 16:30:00<br/>";
    echo "Sumar 30 días: ".date("d/m/Y H:i:s", $fecha)."<br />";
?>

Descargar ejemplo

Sumar y restar fechas

Diferencia entre dos fechas

En primer lugar debemos obtener cada fecha en formato UTC y hallar la diferencia, para después calcular de cuántos segundos, minutos, días, etc. se trata:

<?php
    $fecha1 = mktime(0, 0, 0, 4, 1, 2011);	// 01/04/2011 - 00:00:00
    $fecha2 = mktime(0, 0, 0, 4, 30, 2011);	// 30/04/2011 - 00:00:00

    $diferencia = $fecha2 - $fecha1;

    $milisegundos = $diferencia * 1000;     // 1 segundo = 1000 milisegundos
    $minutos  = $diferencia / 60;
    $horas    = $diferencia / 3600;
    $dias     = $diferencia / 86400;

    echo "Fecha inicial: [01/04/2011 - 00:00:00]<br />";
    echo "Fecha final: [30/04/2011 - 00:00:00]<p />";

    echo "Entre ambas fechas hay una diferencia de [".$milisegundos."] milisegundos.<br />";
    echo "Entre ambas fechas hay una diferencia de [".$diferencia."] segundos.<br />";
    echo "Entre ambas fechas hay una diferencia de [".$minutos."] minutos.<br />";
    echo "Entre ambas fechas hay una diferencia de [".$horas."] horas.<br />";
    echo "Entre ambas fechas hay una diferencia de [".$dias."] días.<br />";
?>

Descargar ejemplo

Diferencia entre dos fechas

Primera página Anterior Siguiente Última página