Logo

PHP es imprescindible si se quiere dar el salto al diseño web profesional

Curso de PHP básico

Por Anyelguti

Este curso forma parte del proyecto Aprende Web

logo

10.4. Funciones de fecha

Marca de tiempo UNIX

Para el control del tiempo, este viene dado por un número que es la Marca de tiempo Unix. Esta indica el número de segundos transcurridos desde el 1 de enero de 1970 a las 0h. 0m. 0s. hora GTM (internacional medida en Greenwich). Las fechas anteriores al 1-enero-1970 dan como Marca de tiempo un número negativo.

De esta manera a cada fecha o instante (a cada segundo) le corresponde un número de Marca de tiempo Unix, este número es la base para poder hacer cálculos con fechas.

Hayar la marca de tiempo Unix

time();

Esta función devuleve la marca de tiempo Unix para la fecha actual (en el momento de cargarse la página). La función no tiene argumentos. Ejemplo:

echo "Marca de tiempo Unix para la fecha actual: ".time();

Lo cual lo veremos así:

Marca de tiempo Unix para la fecha actual: 1410938955
mktime(hora,min,seg,mes,dia,ano);

Esta función devuelve la marca de tiempo Unix para una fecha concreta, la cual es pasada en los argumentos de la función, los argumentos deben rellenarse con números, y en el siguiente orden, hora, minuto, segundo, mes, día, año. Podemos dejar vacíos los argumentos de derecha a izquierda, en ese caso tomarán el valor de la fecha actual. Tanto esta función como la anterior tienen en cuenta las diferencias horarias locales, de manera que nos dará el timpo Unix para la fecha y hora del lugar en que estamos. Ejemplo:

echo "Tiempo Unix para el 1-Marzo-2000 a las 12h. 0m. 0s. = " . mktime(12,0,0,3,1,2000);

Lo cual nos dará el siguiente resultado.

Tiempo Unix para el 1-Marzo-2000 a las 12h. 0m. 0s. = 951908400
gmmktime(hora,min,seg,mes,dia,ano);

Esta función al igual que la anterior devuelve la Marca de tiempo Unix para una fecha concreta, pero la fecha es tomada como una hora GTM (hora internacional), es decir no tiene en cuenta las diferencias horarias locales. Ejemplo:

echo "Inicio del tiempo Unix. fecha 1-1-1970, 0h. 0m. 0s. = " . gmmktime(0,0,0,1,1,1970);

Esto nos dará el siguiente resultado:

Inicio del tiempo Unix. fecha 1-1-1970, 0h. 0m. 0s. = 0

Formato de fechas

Una vez que tenemos una fecha en tiempo Unix, lo que nos interesa es poder mostrarla en pantalla en distintos formatos, para ello utilizaremos la función date()

date("formato",Tiempo_Unix);

Esta función muestra en pantalla una fecha según el formato epecificado en el primer argumento. El segundo argumento es la marca de tiempo Unix de la fecha a mostrar, si se omite muestra la fecha actual.

Formato de fechas para date()

Como hemos dicho el primer argumento de la función es una cadena que indica el formato que debe tener la fecha. Una serie de letras indican el tipo de elemento a mostrar, (hora, día, mes, ...), entre ellas podemos poner comas, puntos, guiones, espacio en blanco, etc. de la siguiente manera: echo date("d-m-Y");.

En este ejemplo nos dará la fecha actual (ya que no hay segundo argumento), en la que se muestran, separados por guiones, el día (d), el mes en número con 2 dígitos (m), y el año con cuatro dígitos (Y) :

17-09-2014

Los distintos elementos que podemos poner para definir el formato de fecha en el primer argumento son por los siguientes caracteres, que nos darán los siguientes valores:


Caracter Descripción Valores devueltos
Día --- ---
d Día del mes. 2 dígitos, con 0 inicial 01 a 31
j Día del mes sin 0 inicial 1 a 31
Semana --- ---
D Dia de la semana abreviado (inglés, 3 letras) Mon a Sun
l (ele minúscula) Día de la semana completo (inglés) Sunday a Saturday
N Número del día del la semana 1 (lun) a 7 (dom)
w Número del día del la semana 0 (dom) a 6 (sáb)
W Semanas transcurridas del año 1 a 52 ó 53
Mes --- ---
m Número de mes con 0 inicial 01 a 12
n Número de mes sin 0 inicial 1 a 12
F Mes (texto en inglés) January a December
M Mes abreviado. Tres letras (en inglés) Jan a Dec
t Días que tiene el mes. 28 a 31
año --- ---
Y Año en 4 dígitos Ej.: 1990 ó 2003
y Año en 2 dígitos Ej.: 90 ó 03
L Indica si el año es bisiesto 1 (sí), 0 (no)
Hora, min, seg. --- ---
g Hora de 1 a 12 con 0 inicial 00 a 12
h Hora de 1 a 12 sin 0 inicial 1 a 12
G Hora de 0 a 23 con 0 inicial 00 a 23
H Hora de 0 a 23 sin 0 inicial 0 a 23
a Ante meridiano o Post meridiano. Minúsculas. am ó pm
A Ante meridiano o Post meridiano. Mayúsculas. AM ó PM
i Minuto con 0 inicial 00 a 59
s Segundo con 0 inicial 00 a 59
Fecha completa --- ---
c Fecha en formato ISO 8601 Ej.: 2005-03-12T15:19:21+00:00
r Fecha en formato RFC 2822 Ej: Thu, 21 Dec 2000 16:01:07 +0200
Otros --- ---
e Identifica zona horaria Ej.: Europe/Paris
I (i mayúscula) Indica si estamos en horario de verano. 1 = sí, 0 = no
P Diferencia con la hora GTM (Greenwich) indica horas y minutos. Ej: +02:00
Z Diferencia con la zona horaria en segundos. 43200 a 43200
U Tiempo Unix de la fecha dada igual que en mktime()

Podemos hacer cualquier combinación de estos elementos para dar formato a la fecha. Dentro del argumento "formato", los caracteres que no están en esta lista serán impresos tal como son, si queremos imprimir algún caracter de la lista sin que sea interpretado como tal, debemos ponerle delante la barra invertida ej: \d imprimirá "d" y no el día del mes como está en la lista. Veamos algunos ejemplos con la fecha actual:

Código PHP Resultado
echo date("l-j-F"); Wednesday-17-September
echo date("d-m-y"); 17-09-14
echo "hora :".date("ga :i :s"); hora :9am :29 :15
echo date("D-n-M-Y :H-i-s.P \G\M\T."); Wed-9-Sep-2014 :09-29-15.+02:00 GMT.

Como puedes observar las posibles combinaciones para mostrar la fecha son numerosas, sin embargo surge el problema de que tanto los días de la semana como los meses aparecen en inglés. En el próximo apartado veremos cómo mostrar la fecha en el idioma local.

Fecha en idioma local

setlocale(categoría,"localización");

En primer lugar usaremos la función setlocale() para definir cual es la información que debe tratarse de forma local, y desde qué región o país.

Esta función tiene dos argumentos, el primero categoría indica cual es el tipo de información que debe tratarse de forma local , como aquí es la fecha el primer argumento será CL_TIME. En el segundo argumento pondremos en forma de cadena (entre comillas), el código del país o región local. Si ponemos una cadena vacía (""), se interpreta que es la región o país del ordenador que ejecuta el código. Escribimos la siguiente línea PHP:

setlocale(CL_Time,"");

Hay que tener en cuenta que esta función afecta también a otras páginas del sitio, por lo que si la definimos en una página, todas las demás páginas del sitio se verán afectadas de la misma manera.

strftime("formato",Marca_tiempo);

Esta función permite definir la fecha en el idioma local, por lo que una vez definida la localización mediante la función anterior (setlocale()), nos dará la fecha en el idioma local. el segundo argumento es opcional, y si no se pone dará la fecha local actual. Lo pondremos para una fecha distinta, y pasaremos en él la marca de tiempo Unix de la fecha que queramos formatear.

Al igual que en la función date() el primer argumento marca el formato que queremos darle a la fecha, sólo que aquí los elementos que podemos poner para visualizar la fecha son distintos que en date(), los definimos en la siguiente tabla:


Caracter Descripción Valores devueltos
Día --- ---
%d Día del mes con 0 inicial 01 a 31
Semana --- ---
%A Día completo de la semana. Lunes a domingo
%a Dia abreviado de la semana lun a dom
%w Día de la semana en número. 0 (Domingo) a 6 (Lunes)
%U Semana del año: la semana empieza en domingo. 1 a 53
%W Semana del año: la semana empieza en lunes. 1 a 53
Mes --- ---
%B Nombre completo del mes. Enero a Diciembre
%b Mombre abreviado del mes. ene a dic
%m Mes en número con 0 inicial. 01 a 12
Hora --- ---
%H Hora en formato 00 a 23. 00 a 23
%I Hora en formato 1 a 12. 1 a 12
%M Minuto en formato 00 a 59. 00 a 59
%S Segundo en formato 00 a 59. 00 a 59
Otros --- ---
%x Fecha preferida, sin la hora. ej: como "%d/%m/%Y"
%X Hora preferida, sin la fecha. ej: como "%H:%M:%S"
%c Fecha y hora completa, preferida. ej: "%d/%m/%Y H:%M:%S"
%Z Zona horaria local. Ej: Europe/Madrid.

Veamos un ejemplo de Fecha en formato local, lo primero que haremos será configurar el tiempo como local mediante la función setlocale():

setlocale(LC_TIME,"");

Después definimos el formato de tiempo mediante la funcion strftime():

echo strftime("%A, %d de %B de %Y. Hora: %H-%M-%S.");

El código anterior dará el siguiente resultado:

Wednesday, 17 de September de 2014. Hora: 09-29-15.

El idioma y la hora devueltas corresponden a la configuración de idioma y hora locales del servidor de PHP, por lo que si hacemos la prueba en nuestro ordenador (en localhost), nos dará el resultado en el idioma y hora que tengamos configurado en el ordenador.

El probrema puede estar si al subir la página tenemos el servidor en otro idioma u otro país, con lo cual nos dará el idioma y la hora de ese país.

Fecha en otros idiomas.

Para obtener la fecha en otros idiomas, tendremos que hacer la configuración local en el otro idioma. para ello lo marcaremos en el segundo argumento de la función setlocale():

setlocale(LC_TIME,"fr");

Ahora cuando formateemos la fecha con strftime(), nos saldrá en francés:

echo strftime("%A, %d - %B - %Y.");

El resultado ahora será:

Wednesday, 17 - September - 2014.

La forma escribir el idioma no funciona igual en todos los sistemas, depende de la configuración del servidor, en algunos debemos poner las 2 primeras iniciales del idioma en inglés, en otros debemos poner el nombre completo del idioma en inglés, cada servidor y cada sistema operativo lo indica de una manera. podemos mirar códigos de diferentes países en la página ISO 639. La lista descrita en esta página no garantiza que el código que nos dan funcione con nuestro servidor de PHP, aunque muchas veces es el correcto . (podemos probar con el de dos letras, el de tres, o el nombre completo).

Podemos poner también una lista de opciones separadas por comas, o un array con las opciones, se tomará la primera de ellas que sea reconocida:

setlocale(LC_TIME,"fr,fra,fre,french");

En este ejemplo hemos puesto una lista de los posibles nombres que puede tener el servidor para el idioma francés. El código anterior deberá funcionar en la gran mayoría de servidores.

Para el español probaremos con el siguiente código, el cual deberá funcionar en la gran mayoría de servidores:

setlocal(LC_TIME,"sp,spa,es,spanish");

Hora local

Otro problema puede ser que si el servidor está en otra zona horaria, nos dará su hora, debemos en este caso cambiar la hora que nos da el servidor por la hora local en nuestra zona horaria. para ello utilizaremos la función date_default_timezone_set();

date_default_timezone_set("zona_horaria");

Como parámetro de la función pasaremos el nombre de la zona horaria en que queremos ver la fecha. Esta afectará a todas las fechas posteriores que escribamos a partir de esta función. Los nombres de las zonas horarias válidas puedes verlos en : Listado de Timezones soportados

Si queremos pasar la hora que nos da un servidor no español a la hora de españa, escribiremos la siguiente línea:

date_default_timezone_set("Europe/Madrid");

A partir de aquí las fechas vendrán con el horario local de Madrid.

En el siguiente enlace se muestra una página de ejemplo en la que se han usado las funciones anteriores para configurar la fecha según distintos lugares e idiomas.

Fecha y hora para un lugar e idioma.

El código de la página anterior incluido el PHP puedes verlo en el siguiente enlace:

Código para "Fecha y hora para un lugar e idioma".






En la siguiente página veremos una serie de funciones también importantes en PHP.

10.5 Otras funciones.



Curso PHP; ir a la página

Anterior siguiente      Siguiente siguiente

Visita nuestro foro:

Puedes consultar tus dudas y sugerencias:

sobre el foro (info y entrar)

Página creada por ANYELGUTI.

Manda tus sugerencias:
aprendeweb@ymail.com manda un correo