PHP Obtener la fecha del servidor

Empezamos con esta una serie de entradas sobre manipulación, obteción y formateo de fechas en PHP.
Curiosamente se ha tomado el día 1 de Enero de 1970 a las 00:00:00 horas GMT como referencia mundial para obtener la fecha actual en cualquier computador y con cualquier lenguaje. A esta hora se le llama la hora UNIX por coincidir con el inicio de la era UNIX.
De tal forma que si hubiéramos preguntado la hora a un servidor el día 1 de Enero de 1970 a las 00:00:01 ese servidor nos hubiese devuelto un 1.

PHP Ejemplo de obtención de fecha

En PHP podemos obtener la fecha actual invocando la función time(), sin parámetro como se ve en este ejemplo:

<?php
echo time();
?>

Si bien este método parece tedioso y poco útil, es en realidad todo lo contrario ya que al tener la fecha exacta en una variable entera, podemos sin ninguna complicación hacer diferencias, sumas y cualquier otra operación, por ejemplo veamos este ejemplo:

PHP operaciones con fechas

<?php
$tiempo1=time();
for ($i=0;$i<1000000;$i++)
	$tiempo2=time();

echo "<p>".$tiempo1."</p>";	
echo "<p>".$tiempo2."</p>";	
echo "<p>"."Su servidor tarda ".($tiempo2-$tiempo1)." segundos en pedir un millon de veces la fecha";
?>

Lógicamente un segundo es mucho tiempo para una aplicación web, dos mismos usuarios pueden pulsar el mismo botón de forma prácticamente simultanea y para eso disponemos de la función microtime(), que nos devuelve dos resultados separador por un espacio en blanco. El primer resultado son los microsegundos (millonésima parte de un segundo) y el segundo resultado son los segundos, por eso podríamos cambiar el ejemplo anterior por este:

PHP función microtime

<?php
$tiempo1=explode(" ",microtime());
for ($i=0;$i<1000000;$i++)
	$tiempo2=explode(" ",microtime());

echo "<p>Microsengudos= ".$tiempo1[0]." Segundos= ".$tiempo1[1]."</p>";	
echo "<p>Microsengudos= ".$tiempo2[0]." Segundos= ".$tiempo2[1]."</p>";
echo "<p>"."Su servidor tarda ".($tiempo2[0]-$tiempo1[0])." microsegundos en pedir un millon de veces la microfecha, es decir, tarda aproximadamente ".($tiempo2[1]-$tiempo1[1])." segundos";
?>

Nota: a microtime se le puede pasar el parámetro TRUE para que devuelva el resultado en coma flotante.

PHP funciones concretas para el tratamiento de fechas

Conlas dos funciones anteriores y las apropiadas operaciones matemáticas podríamos obtener resultados de fechas muy precisos, pero no será necesario complicar tanto nuestros algoritmos porque disponemos de funciones concretas que realizarán estos cálculos por nosotros:

  • gettimeofday(), retorna una matriz asociativa con esta forma: sec=>Segundos, usec=>microsegundos, minutestwest=>Minutos al oeste de Greenwitch (positivo al oeste y negativo al este), dstime=>Tiempo de corrección (horario invierno o verano).
  • getdate(), nos devuelve una matriz asociativa pero con, segundos (seconds), minutos (minutes), horas (hours), día del mes (mday), día de la semana (wday), mes del año (mon), año (year), día del año (yday), dia de la semana (weekday), mes(month), marca del tiempo (0). Si llamamos a esta función sin parámetros nos retorna la fecha actual y si recibe un entero nos lo traduce al formato anteriormente explicado
  • localtime(), puede no recibir nada y nos devolverá (en forma de matriz) la fecha actual, si le pasamos un entero lo traduce a fecha actual y como segundo parámetro si recibe FALSE retorna un vector escalar y si recibe TRUE retorna un vector asociativo, obtendremos algo así:
  • 0 (tm_sec)
  • 1 (tm_min)
  • 2 (tm_hour)
  • 3 (tm_mday), empezando en 0
  • 4 (tm_mon)
  • 5 (tm_year), desde 1900
  • 6 (tm_wday)
  • 7 (tm_yday)
  • 8 (tm_isdat)

Veamos lo todo con ejemplo:

<?php
echo "<p>Ejemplos para gettimeofday()</p>";
$fechaactual=gettimeofday();
foreach ($fechaactual as $indice=>$dato)
	echo "<p>$indice=>$dato</p>";
$fechaactual=getdate();
echo "<p>Ejemplos para getdate()</p>";
echo "<p>_____________________________________________________</p>";
foreach ($fechaactual as $indice=>$dato)
	echo "<p>$indice=>$dato</p>";
$fechaactual=getdate(1);
echo "<p>Ejemplos para getdate(), con un parametro</p>";
echo "<p>_____________________________________________________</p>";
foreach ($fechaactual as $indice=>$dato)
	echo "<p>$indice=>$dato</p>";
echo "<p>Ejemplos para localtime()</p>";
echo "<p>_____________________________________________________</p>";
$fechaactual=localtime();
foreach ($fechaactual as $indice=>$dato)
	echo "<p>$indice=>$dato</p>";
echo "<p>Ejemplos para localtime(), con 1 parametro</p>";
echo "<p>_____________________________________________________</p>";
$fechaactual=localtime(1);
foreach ($fechaactual as $indice=>$dato)
	echo "<p>$indice=>$dato</p>";
echo "<p>Ejemplos para localtime(), con 2 parametros</p>";
echo "<p>_____________________________________________________</p>";
$fechaactual=localtime(1,TRUE);
foreach ($fechaactual as $indice=>$dato)
	echo "<p>$indice=>$dato</p>";
?>

Ejercicios

  1. Comprueba cuántos microsegundos se tardan en hacer un millón de operaciones con la función gettimeofday(). ¿Cuántos segundos?, ¿Cuantos días?
  2. Escribe la fecha actual en el formato que estamos acostumbrados a usar (día/mes/año) todo numérico, usando localtime() en forma asociativa (localtime(time(),TRUE))
  3. Escribe la fecha actual en el formato que estamos acostumbrados a usar (día/mes/año hora:segundos) todo numérico con la función getdate()
  4. Haz una función que traduzca el nombre del día de la semana y del mes, para mostrarlos es castellano (getdate())
  5. Repite el ejercicio 2 con la función localtime() en modo escalar

Originally posted 2011-03-06 16:40:22.

Deja un comentario