En el artículo de ayer veíamos como podíamos crear un reloj en javascript. En este ejemplo se puede ver cómo se obtiene la hora de la máquina cliente donde se ejecuta. (Interesante leerlo antes de afrontar este…)
Me han llegado numerosos emails diciendo cómo hacer esto, pero tomando la hora del servidor. A si que aquí tenéis la respuesta a vuestras dudas. En este caso hemos escogido en lenguaje ASP como lenguaje de servidor, pero no podría valer cualquier otro. Véase PHP, JSP,…
Lo primero que debemos de hacer es recoger la fecha del servidor. En este caso utilizamos la función Now() de ASP para que nos de la fecha actual del servidor.
Lo siguiente será el pasar esa fecha a una rutina Javascript. Para ello lo que hacemos es montar la rutina Javascript «al vuelo». Es decir, el código de la rutina Javascript que se ejecutará en el cliente llevará parte de código de servidor. El servidor antes de devolver la página al cliente tendrá ya una rutina pura y dura Javascript.
Veamos como quedaría:
El ejemplo de crear un reloj en javascript lo que hacía era poner un Timer que lanzaba cada segundo una función, la cual, solicitaba la fecha actualizada. Si hicieramos eso volveríamos a tener la fecha del cliente y no la del servidor. Es por ello que lo que tendremos que hacer es el control manual de la fecha, es decir, incrementar nosotros mismos la fecha, segundo a segundo.
Para incrementar la fecha lo primero que tenemos que hacer es obtener los segundos con getSeconds(), minutos con getMinutes() y hora del servidor con getHours().
var segundos = fecha_js.getSeconds();
var hora = fecha_js.getHours();
var minutos = fecha_js.getMinutes();
Y en la función que se ejecute cada segundo (mejor dicho, cada 1000 milésimas) deberemos de seguir el siguiente algoritmo:
segundos++;
if (segundos == 60) {
segundos = 0;
minutos++;
if (minutos == 60) {
minutos = 0;
hora++;
if (hora == 24) {
hora = 0;
}
}
}
Es sencillo. Si llegamos a 60 segundos es que ha pasado un minuto. Incrementamos el minuto y ponemos el segundero a 0. Cuando lleguemos a 60 minutos es que ha pasado una hora. Incrementamos la hora y ponemos el minutero a 0. Y por último, cuando lleguemos a 24 horas, ponemos estas a 0.
Lo último del script será poner los datos en un campo input de un formulario. Como siempre, con getElementById() Sencillo ¿no?
document.getElementById("hora").value = " " + hora + ":" + minutos + ":" + segundos;
Y volver a ejecutar la función de paso de un segundo:
window.setTimeout("mostrar()",1000);
Ya tenemos el reloj de nuestro servidor. Claro que siempre y cuando a este no le cambien la fecha on-line ¿verdad?