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>\n";
?>
<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>\n";
?>
2007
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 RFC 2822 | 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>\n";
print "<p>Ejemplo 2: " . date("l, F jS Y ") . "</p>\n";
?>
<p>Ejemplo 1: 03/03/05 13:43:48</p>
<p>Ejemplo 2: Thursday, March 3rd 2005</p>
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>\n";
?>
<p>Ejemplo 1: jueves, 30 de abril de 2009</p>
La función 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>";
?>
<p>Hoy es el 10/3/2005.</p>
La función checkdate($mes, $dia, $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>\n";
} else {
print "<p>El día $dia/$mes/$anyo no existe.</p>\n";
}
?>
<p>El día 29/2/2008 existe.</p>
<?php
$dia = 29;
$mes = 2;
$anyo = 2007;
if (checkdate($mes, $dia, $anyo)) {
print "<p>El día $dia/$mes/$anyo existe.</p>\n";
} else {
print "<p>El día $dia/$mes/$anyo no existe.</p>\n";
}
?>
<p>El día 29/2/2007 no existe.</p>
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>\n";
} else {
print "<p>El día $dia/$mes/$anyo no existe.</p>\n";
}
?>
<p>El día 12/10/1582 existe.</p>
<?php
$dia = 1;
$mes = 1;
$anyo = 0;
if (checkdate($mes, $dia, $anyo)) {
print "<p>El día $dia/$mes/$anyo existe.</p>\n";
} else {
print "<p>El día $dia/$mes/$anyo no existe.</p>\n";
}
?>
<p>El día 1/1/0 no existe.</p>
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);
}