9-Fechas

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