En este capítulo se estudiaran las funciones existentes
en PHP para el empleo de fechas.Este tipo de funciones existen
en la mayoria de lenguajes de programacion y van orientadas a
su obtencion y representacion en diferentes formatos.
El tiempo en cualquier lenguaje de programacion 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 funcion mas sencilla que se
basa en esta marca de tiempo es la funcion time() cuyo
valor devuelto es el numero entero que representa la marca de
tiempo correspondiente al instante en que se ejecuto la funcion
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 quisieramos tener como valor de
referencia la hora del ordenador desde el cual se ejecuta empleariamos
la funcion gettimeofday() en la cual pasariamos
como parametro interno: sec(para saber los segundos),usec(microsegundos),minuteswest(nº
segundos al oeste de greenwich) y dstime(tipo de correccion en
horarios de verano e invierno).
Estas funciones citadas anteriormente son poco utilizadas ya
que la existencia de otras funciones mas completas como por ejemplo
la funcion getdate() que obtiene una matriz asociativa
con la informacion 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 |
Dia correspondiente del mes |
wday |
Dia de la semana en valor numerico(empezando
por 0) |
mon |
Mes del año en valor numerico.Del
1 al 12. |
year |
Valor numerico del año |
yday |
Dia del año en valor numerico |
weekday |
Cadena de caracteres que contiene el
dia 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 funcion
getdate() |
Si no le pasamos ningun parametro a la funcion entonces se considera
la hora actual del sistema y si se recibe como parametro un numero
entero entonces lo convierte a la fecha correspondiente.
Otra funcion para obtener la hora es la funcion localtime(marca_tiempo,tipo_matriz);
cuyos valores pasamos a comentar a continuacion:
Indice |
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 |
Dia correspondiente del mes |
4 |
tm_wday |
Dia de la semana en valor numerico(empezando
por 0) |
5 |
tm_mon |
Mes del año en valor numerico.Del
0 al 11. |
6 |
tm_year |
Valor numerico del año.(se ve
afectado por el efecto 2000) |
7 |
tm_yday |
Dia del año en valor numerico |
8 |
tm_isdst |
Indica si esta activado el efecto del
cambio de hora. |
Formatos de fechas
Las funciones vistas anteriormente nos permitian convertir el
valor entero de la fecha en un valor mas facilmente entendible,
aunque para poder acceder a dicha informacion hay que pasar por
el paso previo de obtener una matriz.Para evitar ese paso intermedio
php pone a su disposicion la funcion date(formato,marca_tiempo);
esta funcion 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:
Opcion |
Descripcion |
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 |
Dia del mes con dos digitos desde 01
a 31 |
D |
Dia 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 dia aparezca en formato
1 a 31 |
l(L min) |
Dia 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 |
Numero de dias del mes especificado
de 28 a 31 |
U |
Numero de segundos desde el comienzo
de la "era UNIX" |
w |
Numero del dia de la semana de 0 a 6 |
Y |
Año con cuatro cifras |
y |
Año con dos cifras |
z |
Dia del año de 0 a 365 |
Z |
Obtiene la diferencia horaria en segundos
con respecto al GMT |
La funcion strftime() representa otra posibilidad para aplicar
formatos a una fecha.Esta funcion utiliza las convenciones locales
de la maquina desde la que se ejecuta el script para devolver
una cadena con el formato definido en el idioma seleccoinado .Su
formato queda definido por los siguientes valores:
Opcion |
Descripcion |
%a |
Nombre del dia de la semana abreviado
en el idioma actual |
%A |
Nombre del dia 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 |
Representacion de fecha y hora en el
idioma actual |
%d |
Dia del mes en formato 01 a 31 |
%H |
Hora como numero de 01 a 12 |
%I |
Hora como numero de 01 a 12 |
%j |
Dia 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 segun la hora dada |
%S |
Segundos en numero |
%U |
Numero de la semana del año como
el primer domingo como primer dia de la semana |
%W |
Numero de la semana del año como
el primer lunes como primer dia de la semana |
%w |
Dia de la semana en numero de 0 a 6 |
%x |
Representacion por defecto de la fecha
sin hora |
%X |
Representacion 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 |
%% |
Caracer % |
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 continuacion:
La funcion 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 funcion gmmktime() funciona de la misma forma
lo que considera que los parametros representan una hora GMT.
La funcion setlocale(categoria,pais); nos permite
establecer el idioma en los que apareceran la fecha,hora,etc.
Las categorias posibles son:
Opcion |
Descripcion |
LC_TYPE |
Conversion de cadenas a configuracion
regional |
LC_NUMERIC |
Separadores numericos |
LC_TIME |
Para aplicar formatos de fecha y hora
con strftime() |
LC_ALL |
Todos los anteriores |
Validacion de fechas
Existen numerosas ocasiones en las que es necesario la creacion
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 comprobacion:
-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