En este capítulo se estudiarán las funciones existentes en PHP para el empleo de fechas. Este tipo de funciones existen en la mayoría de lenguajes de programación y van orientadas a su obtención y representación en diferentes formatos.
El tiempo en cualquier lenguaje de programación se suele tomar con respecto al inicio de la “era UNIX” que es el 1 de enero de 1970 a las 00:00:00. La función más sencilla que se basa en esta marca de tiempo es la función time() cuyo valor devuelto es el numero entero que representa la marca de tiempo correspondiente al instante en que se ejecutó la función con respecto a la era unix.
En algunas aplicaciones es necesario poseer una marca de tiempo mas detallada y por ello usamos microtime() que devuelve una cadena de caracteres con los segundos y microsegundos.
En caso de que quisiéremos tener como valor de referencia la hora del ordenador desde el cual se ejecuta emplearíamos la función gettimeofday() en la cual pasaríamos como parámetro interno , sec (para saber los segundos), usec (microsegundos), minuteswest (nº segundos al oeste de greenwich) y dstime (tipo de corrección en horarios de verano e invierno).
Estas funciones citadas anteriormente son poco utilizadas ya que la existencia de otras funciones más completas, como por ejemplo la función getdate() que obtiene una matriz asociativa con la información de la fecha y hora del sistema. Los elementos de dicha matriz son:
Clave | Contenido |
seconds | Numero de segundos de la hora actual |
minutes | Numero de minutos de la hora actual |
hours | Numero de horas de la hora actual |
mday | Día correspondiente del mes |
wday | Día de la semana en valor numérico(empezando por 0) |
mon | Mes del año en valor numerico.Del 1 al 12. |
year | Valor numérico del año |
yday | Día del año en valor numérico |
weekday | Cadena de caracteres que contiene el día de la semana(en ingles) |
month | Cadena de caracteres que contiene el mes del año(en ingles) |
0 | Marca de tiempo obtenida por la función getdate() |
Si no le pasamos ningún parámetro a la función entonces se considera la hora actual del sistema y si se recibe como parámetro un numero entero entonces lo convierte a la fecha correspondiente.
Otra función para obtener la hora es la función localtime(marca_tiempo,tipo_matriz);cuyos valores pasamos a comentar a continuación:
Índice | Clave | Contenido |
0 | tm_sec | Numero de segundos de la fecha indicada |
1 | tm_min | Numero de minutos de la fecha indicada |
2 | tm_hour | Numero de horas de la fecha indicada |
3 | tm_mday | Día correspondiente del mes |
4 | tm_wday | Día de la semana en valor numérico(empezando por 0) |
5 | tm_mon | Mes del año en valor numerico.Del 0 al 11. |
6 | tm_year | Valor numérico del año.(se ve afectado por el efecto 2000) |
7 | tm_yday | Día del año en valor numérico |
8 | tm_isdst | Indica si esta activado el efecto del cambio de hora. |
Formatos de fechas
Las funciones vistas anteriormente nos permitían convertir el valor entero de la fecha en un valor mas fácilmente entendible, aunque para poder acceder a dicha información hay que pasar por el paso previo de obtener una matriz. Para evitar ese paso intermedio, PHP pone a tu disposición la funcióndate(formato,marca_tiempo);
Esta función nos devuelve una cadena de caracteres que se corresponde con una fecha a la que se ha aplicado un determinado formato. Para definir el formato de la fecha se dispone de las siguientes opciones:
Opción | Descripción |
a | Hace que en la hora aparezca la cadena am o pm |
A | Hace que en la hora aparezca la cadena AM o PM |
d | Día del mes con dos dígitos desde 01 a 31 |
D | Día de la semana como cadena de tres letras(en ingles).Ejemplo: “Mon” |
F | Nombre del mes completo como una cadena de caracteres.Ejemplo: “March” |
h | Hace que la hora aparezca en formato 01 a 12 |
H | Hace que la hora aparezca en formato 00 a 23 |
g | Hace que la hora aparezca en formato 1 a 12 |
G | Hace que la hora aparezca en formato 0 a 23 |
i | Hace que los minutos aparezcan en formato 00 a 59 |
j | Hace que el día aparezca en formato 1 a 31 |
l(L min) | Día de la semana completo.Ejemplo: Monday |
L | Escribe 0 si no es año bisiesto y 1 si lo es |
m | Hace que el mes aparezca en formato 01 a 12 |
M | Hace que el mes aparezca en formato 1 a 12 |
s | Hace que los segundos aparezcan en formato 00 a 59 |
S | Cadena de caracteres con el sufijo ordinal.Ejemplo: “th”,”nd”. |
t | Número de días del mes especificado de 28 a 31 |
U | Número de segundos desde el comienzo de la “era UNIX” |
w | Número del día de la semana de 0 a 6 |
Y | Año con cuatro cifras |
y | Año con dos cifras |
z | Día del año de 0 a 365 |
Z | Obtiene la diferencia horaria en segundos con respecto al GMT |
La función strftime() representa otra posibilidad para aplicar formatos a una fecha. Esta función utiliza las convenciones locales de la máquina desde la que se ejecuta el script para devolver una cadena con el formato definido en el idioma seleccionado. Su formato queda definido por los siguientes valores:
Opción | Descripción |
%a | Nombre del día de la semana abreviado en el idioma actual |
%A | Nombre del día de la semana completo en el idioma actual |
%b | Nombre del mes abreviado en el idioma actual |
%B | Nombre del mes completo en el idioma actual |
%c | Representación de fecha y hora en el idioma actual |
%d | Día del mes en formato 01 a 31 |
%H | Hora como numero de 01 a 12 |
%I | Hora como numero de 01 a 12 |
%j | Día del año como numero de 001 a 366 |
%m | Mes como numero de 01 a 12 |
%M | Minuto en numero |
%p | am o pm según la hora dada |
%S | Segundos en numero |
%U | Numero de la semana del año como el primer domingo como primer día de la semana |
%W | Numero de la semana del año como el primer lunes como primer día de la semana |
%w | Día de la semana en numero de 0 a 6 |
%x | Representación por defecto de la fecha sin hora |
%X | Representación por defecto de la hora sin fecha |
%y | Año en numero de 00 a 99 |
%Y | Año en numero de cuatro cifras |
%Z | Nombre o abreviatura de la zona horaria |
%% | Caracter % |
Estableciendo horas y fechas
Una vez conocida la forma de obtener la fecha actual, es necesario disponer de una forma de poder fijar una determinada hora para establecer por ejemplo la fecha de caducidad de una cookie, es decir, la forma de obtener una marca de tiempo correspondiente a una determinada hora.
Para ello PHP dispone de dos funciones que son mktime() y gmmktime() cuyo funcionamiento explicaremos a continuación:
La función mktime(hora,minuto,segundo,mes,dia,año,[ajuste->0 horario de verano y 1 invierno]); nos devuelve un valor entero que representa la marca de tiempo UNIX de una determinada fecha. Cada uno de los valores mencionados puede omitirse siempre y cuando a partir del valor omitido no se representen mas valores a su derecha.
La función gmmktime() funciona de la misma forma lo que considera que los parámetros representan una hora GMT.
La función setlocale(categoria,pais); nos permite establecer el idioma en los que aparecerán la fecha,hora,etc. Las categorías posibles son:
Opción | Descripción |
LC_TYPE | Conversión de cadenas a configuración regional |
LC_NUMERIC | Separadores numéricos |
LC_TIME | Para aplicar formatos de fecha y hora con strftime() |
LC_ALL | Todos los anteriores |
Validación de fechas
Existen numerosas ocasiones en las que es necesario la creación de un sistema para comprobar si la fecha introducida por el usuario es valida o no. Para ello PHP nos brinda dos funciones capaces de realizar dicha comprobación:
– checkdate(mes,dia,año); Comprueba que la fecha introducida sea correcta .
– strtotime(cadena_fecha); Comprueba que la cadena de fecha sea correcta. Para ello la fecha debe estar en formato ingles, es decir, mm/dd/aa
Fechas PHP
7:19:00 p.m.
otros