Cursos de informática gratis
TUTORIAL PHP
hosting de calidad
  1. INTRODUCCIÓN A PHP
  2. TIPOS DE DATOS, VARIABLES, CONSTANTES Y ARRAYS
  3. SENTENCIAS DE CONTROL
  4. TRATAMIENTO DE ARRAYS
  5. TRATAMIENTO DE CADENAS (I)
  6. TRATAMIENTO DE CADENAS (II)
  7. TRATAMIENTO DE CADENAS (III)
  8. TRATAMIENTO DE NÚMEROS
  9. TRATAMIENTO DE FECHAS
  10. FORMULARIOS
  11. COOKIES EN PHP
  12. SESIONES EN PHP
  13. ARCHIVOS Y DIRECTORIOS
  14. PHP Y CORREO ELECTRÓNICO
  15. CLASES Y OBJETOS EN PHP
  16. PHP Y BASES DE DATOS
  17. CONFIGURAR PHP

Tutorial PHP - Cómo crear una página web

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

Regístrate: 
 ¿Tienes dudas sobre este curso? únete a nuestra Comunidad en Google+
Primera página Anterior Siguiente Última página

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 indican: 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 />";
?>
Fecha en PHP
Ejemplo

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") );
?>
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");
?>
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 los 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.

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")."]";
?>
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 />";
?>
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);
?>
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.

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() ]

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 />";
?>
Ejemplo
Sumar y restar 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 />";
?>
Ejemplo
Diferencia entre dos fechas
Primera página Anterior Siguiente Última página
Usamos cookies para ofrecerte una experiencia mejorada, el continuar navegando supone que aceptas su uso