Volver al índiceFunciones de fecha y hora


Huso horario: función date_default_timezone_set()

La función date_default_timezone_set($identificador_de_zona_horaria) establece el huso horario que utilizan las funciones de fecha y hora. El manual de PHP contiene la lista de identificadores de zonas horarias válidas.

<?php
date_default_timezone_set('Europe/Madrid');
print "<p>".date('Y')."</p>";
?>
<p>2007</p>

Cuando la directiva error_reporting tiene establecido el valor E_STRICT, PHP genera un aviso si no se ha establecido el huso horario antes de utilizar cualquier función de fecha y hora.

<?php
print "<p>".date('Y')."</p>";
?>
Strict Standards: date() [function.date]: It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Paris' for '1.0/no DST' instead in ejemplo.php on line 2

2007

Volver al principio


Generar cadena con fecha y hora

Función date()

La función date($formato) permite generar una cadena que incluye la fecha y/o la hora del sistema. La función date() espera uno o dos argumentos. El primer argumento define el formato de la cadena y el segundo el instante que se quiere convertir (si no se indica el segundo argumento, la función trabaja con la fecha y hora actual del sistema).

Para definir el formato de la cadena se utilizan, entre otros, los siguientes caracteres:

día mes año
números con ceros delante d m y (2 cifras)
Y (4 cifras)
números sin ceros delante j n
nombre corto (3 letras) D M
nombre largo (completo) l F
hora (12h) hora (24 h) minutos segundos
números con ceros delante h H i s
números sin ceros delante g G

Además, se pueden utilizar los siguientes valores:

carácter
fecha completa en formato RFC2822 r
fecha completa en formato ISO 8061 c
número de días total del mes actual t
número del día de la semana (domingo: 7, lunes: 1, etc.) N
número del día de la semana (domingo: 0, lunes: 1, etc.) w
Número de día del año z

<?php
date_default_timezone_set('Europe/Madrid');
print "<p>Ejemplo 1: ".date("d/m/y H:i:s")."</p>";
print "<p>Ejemplo 2: ".date("l, F jS Y ")."</p>";
?>
Ejemplo 1: 03/03/05 13:43:48
Ejemplo 2: Thursday, March 3rd 2005

Volver al principio


Función strftime()

La función strftime($formato) permite generar una cadena que incluye la fecha y/o la hora del sistema en el idioma deseado. La función strftime() espera uno o dos argumentos. El primer argumento define el formato de la cadena y el segundo el instante que se quiere convertir (si no se indica el segundo argumento, la función trabaja con la fecha y hora actual del sistema).

Para definir el formato de la cadena se utilizan, entre otros, los siguientes caracteres:

día mes año
números con ceros delante %d %m %y (2 cifras)
%Y (4 cifras)
nombre corto (3 letras) %a %b
nombre largo (nombre completo) %A %B

hora (12h) hora (24 h) minutos segundos
números con ceros delante %I %H %M %S

Además, se pueden utilizar los siguientes valores:

carácter
fecha y hora (dd/mm/aaaa hh:mm:ss) %c
fecha (dd/mm/aaaa) %x
hora (hh:mm:ss) %X
<?php
date_default_timezone_set('Europe/Madrid');
setlocale(LC_TIME, 'spanish');
print "<p>".strftime("Ejemplo 1: %A, %d de %B de %Y")."</p>";
?>
Ejemplo 1: jueves, 30 de abril de 2009

Volver al principio


Fecha y hora actual: función localtime()

La funcion localtime() devuelve una matriz con información detallada de la fecha y hora actual. Para que devuelva esa información de la hora actual, se pasa como argumento la función time(). El segundo argumento indica si la matriz tiene índices asociativos.

<?php
$fecha_actual = localtime(time(),1);
$anyo_actual = $fecha_actual['tm_year'] + 1900;
$mes_actual = $fecha_actual['tm_mon'] + 1;
$dia_actual = $fecha_actual['tm_mday'];
print "<p>Hoy es el $dia_actual/$mes_actual/$anyo_actual.</p>"; 
?>
Hoy es el 10/3/2005.

Volver al principio


Validación de fecha: función checkdate()

La función checkdate($dia, $mes, $anyo) devuelve el valor true si la fecha enviada es correcta en el calendario Gregoriano y false si no lo es.

<?php
$dia = 29;
$mes = 2;
$anyo = 2008;
if (checkdate($mes, $dia, $anyo)) {
    print "<p>El día $dia/$mes/$anyo existe.</p>";
} else {
    print "<p>El día $dia/$mes/$anyo no existe.</p>";
}
?>
El día 29/2/2008 existe.
<?php
$dia = 29;
$mes = 2;
$anyo = 2007;
if (checkdate($mes, $dia, $anyo)) {
    print "<p>El día $dia/$mes/$anyo existe.</p>";
} else {
    print "<p>El día $dia/$mes/$anyo no existe.</p>";
}
?>
El día 29/2/2007 no existe.

Hay que tener en cuenta que el calendario Gregoriano se estableció (en algunos países) a partir del 15 de octubre de 1582, por lo que no tiene sentido aplicar esta función a fechas anteriores a esa fecha. Por ejemplo, la función checkdate() no tiene en cuenta que hay unos días (del 5 al 14 de octubre de 1582) que no existieron en el calendario Gregoriano. Por otra parte, si el año es negativo o cero, la función checkdate() devuelve siempre false.

<?php
$dia = 12;
$mes = 10;
$anyo = 1582;
if (checkdate($mes, $dia, $anyo)) {
    print "<p>El día $dia/$mes/$anyo existe.</p>";
} else {
    print "<p>El día $dia/$mes/$anyo no existe.</p>";
}
?>
El día 12/10/1582 existe.
<?php
$dia = 1;
$mes = 1;
$anyo = 0;
if (checkdate($mes, $dia, $anyo)) {
    print "<p>El día $dia/$mes/$anyo existe.</p>";
} else {
    print "<p>El día $dia/$mes/$anyo no existe.</p>";
}
?>
El día 1/1/0 no existe.

Volver al principio


Convertir cadenas de fechas

Para convertir las cadenas de fechas del formato dd-mm-aaaa al formato aaaa-mm-dd y viceversa se pueden definir estas funciones:

function fechaDma($amd)
{
    return substr($amd, 8, 2)."-".substr($amd, 5, 2)."-".substr($amd, 0, 4);
}

function fechaAmd($dma)
{
    return substr($dma, 7, 4)."-".substr($dma, 4, 2)."-".substr($dma, 1, 2);
}

Volver al principio

Esta página forma parte del curso "Páginas web con PHP" disponible en http://www.mclibre.org
Autor: Bartolomé Sintes Marco
Última modificación de esta página: 30 de abril de 2009

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.