Desgobierno
digitalMuseo de código público
Sala · TiempoPieza 1 de 3
Tiempo

Dos maneras de mover un reloj

Los plazos de un trámite se cuentan con la hora de la sede electrónica, no con la de su ordenador; lo dice la ley. Hemos encontrado dos sedes que resuelven cómo enseñar esa hora de formas opuestas. Las dos mal, cada una a su manera, y las dos con el mismo nombre.

sede.dipujaen.essede.transportes.gob.esguardado el 31 de agosto de 2026comprobado en vivo el 14 de septiembre de 2026

Es la pieza que más nos gusta enseñar de todo el museo: dos sedes, el mismo problema, dos soluciones contrarias y ninguna buena. Y encima riman.

Empecemos en Jaén. La sede electrónica de la Diputación tiene una página titulada «Hora oficial». Es una página seria: dice que esa hora se sincroniza con el Real Observatorio de la Armada, que guarda la hora oficial de España, cita dos artículos de la Ley 39/2015 y advierte, en una frase para enmarcar: «Para cualquier trámite, la fecha y hora oficial de la Sede Electrónica es la única que tendrá validez legal y no la del equipo desde el que se realice el trámite.» Debajo, un reloj con fecha, hora, minutos y segundos, avanzando.

Captura de https://sede.dipujaen.es/Hora
foto 1sede.dipujaen.es/Hora. Tres párrafos por encima del reloj, la frase de que la única hora válida es la de la sede.Captura del 14 de septiembre de 2026, 14:13 (hora peninsular) · el recuadro es nuestro

Nos preguntamos cómo avanzaba. Es una pregunta rara para hacerle a un reloj, pero es a lo que nos dedicamos. La respuesta cabe en treinta líneas: cada segundo, el programa mira el texto pintado en la pantalla —«21:31:49», por ejemplo—, lo parte por los dos puntos, le suma uno al último trozo, se ocupa de que 59 pase a 00 y lo vuelve a pintar. No le pregunta la hora al servidor, el ordenador de la sede. Al Observatorio, tampoco, claro. Ni siquiera al reloj del propio ordenador, que lo tiene al lado. Sabe qué hora es porque acaba de leerla en su propia cara.

1–2sede.dipujaen.es/Horaguardado el 31 ago 2026líneas 381–387
378});
379
380function mueveReloj() {
381    var mensaje = document.getElementById("hora").innerHTML.split(":");1
382
383    hora = parseInt(mensaje[0]);
384    minuto = parseInt(mensaje[1]);
385    segundos = parseInt(mensaje[2]);
386
387    segundos++;2
388
389    if (segundos == 60) {
390        segundos = 0;
1El reloj lee su propia esfera: coge el texto que hay pintado en pantalla y lo parte por los dos puntos. No hay otra fuente.
2Suma un segundo a mano. Las tres condiciones de debajo se ocupan de que 59 pase a 00 y de que 23 pase a 00. La fecha no aparece por ningún sitio: no cambia nunca.

Funciona, si a eso se le llama funcionar. La hora que se ve al abrir la página es la buena: la ha escrito el servidor. Después, el reloj se cuenta los segundos a sí mismo, con la única promesa que hace un navegador cuando se le pide que vuelva dentro de un segundo: nunca antes. Si tarda, el reloj no se entera; suma su segundo y sigue. Un reloj así solo puede atrasar. La fecha, además, no la toca nadie: después de las 23:59:59 vienen las 00:00:00 del mismo día. Tres párrafos por encima sigue la frase de que la única hora válida es la de la sede y no la del equipo desde el que se realice el trámite. Lo que la pantalla enseña bajo ese rótulo, a partir del segundo siguiente, lo cuenta el equipo desde el que se realiza el trámite.

3sede.dipujaen.es/Horaguardado el 31 ago 2026línea 407
405        document.getElementById("hora").innerHTML = hora + ":" + minuto + ":" + segundos;
406
407        setTimeout(mueveReloj, 1000);
408    }
409</script>
410        </div>
3“Vuelve dentro de un segundo”, que el navegador entiende como “no antes de un segundo”. Lo que se retrasa no se recupera.

Uno pensaría que la solución es evidente: que el reloj pregunte la hora al servidor de vez en cuando. En la sede del Ministerio de Transportes lo pensaron, y lo hicieron. Con entusiasmo.

Esa sede —antes sede.mitma.gob.es, hoy sede.transportes.gob.es— también tiene su página de la hora. Se titula «Fecha y hora oficial de la Sede», cita una ley de 2007 sustituida en 2015 y habla en nombre del «Ministerio de Fomento», que ya no se llama así. Pero lo interesante es una frase en negrita justo encima del reloj: «La fecha y hora oficial es proporcionada por la Sede en el momento de la carga de la página. Pulse 'Actualizar' cuando necesite tener certeza de la misma con precisión de segundos.» Es, palabra por palabra, la descripción del reloj de Jaén. Solo que debajo no está el reloj de Jaén.

Captura de https://sede.transportes.gob.es/MFOM.FechaHora/
foto 2sede.transportes.gob.es/MFOM.FechaHora. La advertencia en negrita y, debajo, el reloj que no la cumple.Captura del 14 de septiembre de 2026, 14:13 (hora peninsular) · el recuadro es nuestro
4sede.transportes.gob.es/MFOM.FechaHora/en vivo el 14 sep 2026línea 88
85    Electrónica del Ministerio de Fomento.
86</p>
87<p id="ctl00_ContentFormulario_ctl01" >
88    <strong>La fecha y hora oficial es proporcionada por la Sede en el momento de la carga de la página. Pulse 'Actualizar' cuando necesite tener certeza de la misma con precisión de segundos.</strong>
89</p>
90<div class="capafechahoragrande">
91    <div class="capafechahoragrande_fecha" id="layerFecha">14/09/2026</div>
4La advertencia en negrita de la página de la hora del Ministerio. Describe con exactitud el reloj de Jaén.

Debajo hay un reloj que recibe la hora escrita en la página, la tira y vuelve a pedírsela al servidor. Luego suma un segundo por vuelta, como el de Jaén, y cada veinte vueltas vuelve a preguntar. La pega está en una palabra de la línea que pregunta: false. En el idioma de los navegadores significa “espera aquí hasta que contesten”, y quien espera es la página entera, sin atender clics ni teclas. Desde donde lo hemos medido, un cuarto de segundo, tres veces por minuto. Un reloj que detiene la sede para consultar la hora, que viene a ser lo contrario de para lo que sirve un reloj.

5sede.transportes.gob.es/MFOMWeb/r/js/mfom.jsguardado el 31 ago 2026línea 80
78function obtenerFechaServidor(){
79    try{
80        xmlHttp.open("GET","/fechahora/fechahora.asp?r=" + Math.random(),false);
81        xmlHttp.send(null);
82        if(xmlHttp.status=="200"){
83            var respuesta=xmlHttp.responseText;
5El último valor, false, es la palabra que deja la página entera en suspenso hasta que el servidor conteste.
6sede.transportes.gob.es/MFOMWeb/r/js/mfom.jsguardado el 31 ago 2026línea 103
100pintarHora(globalFecha1,idCapaHora);
101
102//aquí miro si puedo sincronizar con el servidor cada x segundos
103if(tickCounter>=20){
104    tickCounter=0;
105    globalFecha1=obtenerFechaServidor();
106}
6Cada veinte vueltas del segundero, vuelve a preguntar. Y a detenerse.

El mismo reloj va en la cabecera de dos aplicaciones de esa sede, la de autorizaciones de transporte y la del tacógrafo, junto a un enlace que dice «Ver hora oficial de la Sede». Y ahí descubrimos para qué sirve tirar la hora y volver a pedirla: la que el servidor escribe en esas páginas llega vieja. El 31 de agosto, a las cinco de la tarde, decía que eran las tres y media. El 14 de septiembre, a la una del mediodía, decía las tres y media de la madrugada, y siete minutos después seguía diciéndolo. No se nota, porque el programa la tira y pregunta. El paso que sobraba es el que la salva.

Y luego está lo que el fichero cuenta de quien lo escribió. Dos barras al principio de una línea le dicen al navegador que no la lea: es la manera de tachar sin borrar. Justo encima de la línea que pone el reloj en marcha hay otra casi igual, tachada, que pega los textos con el símbolo &, como se hace en VBScript, el idioma en que solían escribirse páginas como la que contesta la hora. Alguien la escribió con la cabeza en el otro lado, no funcionó, la tachó y escribió debajo la buena. Cien líneas más abajo, otro comentario deja constancia de un apaño: «temporal hasta que». Ahí se acaba la frase.

7sede.transportes.gob.es/MFOMWeb/r/js/mfom.jsguardado el 31 ago 2026línea 28
25        globalFecha1.setMilliseconds(fecha2.getMilliseconds());
26    }
27    pintarFechaHora('capafechahora_fecha','capafechahora_hora');
28    //setInterval("pintarFechaHora('" & capaFecha & "','" & capaHora & "')",1000);
29    setInterval("pintarFechaHora('capafechahora_fecha','capafechahora_hora')",1000);
30    
31}
7Tachada con dos barras: la primera versión, pegando los textos con el & de VBScript. La de debajo es la que quedó, con los nombres escritos a mano.
8sede.transportes.gob.es/MFOM.FechaHora/en vivo el 14 sep 2026línea 94
91        <div class="capafechahoragrande_fecha" id="layerFecha">14/09/2026</div>
92        <div class="capafechahoragrande_hora" id="layerHora">13:12:40</div>
93        <script type="text/javascript">
94            mueveReloj(2026,9,14,13,12,40,"layerHora","layerFecha");
95        </script>
96    </div>
97</div>
8La página de la hora arranca el reloj con los dos nombres al revés de como los espera la rutina. No pasa nada: la única línea que los leía es la tachada.
9sede.transportes.gob.es/MFOMWeb/r/js/mfom.jsguardado el 31 ago 2026línea 140
137var titlemod=new String(title);
138var pos=titlemod.indexOf('Javascript');
139if (pos>-1){
140    title=titlemod.substr(46)//temporal hasta que
141}
142var cadena="<div class=\"imprimir\"><a href=\"javascript:imprimir2()\"";
143cadena= cadena + "title=\"" + title + "\">" + texto + "</a><noscript>script deshabilitado</noscript></div>";
9El comentario termina ahí.

Una rutina es un trozo de programa con nombre propio, y el nombre lo elige quien lo escribe. La de Jaén y la del Ministerio se llaman igual: mueveReloj. Lo comprobamos dos veces porque parecía demasiado bonito para ser verdad. Dos sedes que no se hablan, el mismo nombre para el mismo encargo y dos soluciones opuestas. Una no vuelve a preguntarle la hora a nadie. La otra la pregunta al precio más caro que tiene un navegador.

En Jaén la hora es correcta en el momento en que se abre la página. Es también la última vez que se comprueba.

Lo que decimosQue en sede.dipujaen.es/Hora el reloj avanza leyendo el texto que él mismo ha pintado, sin volver a consultar al servidor ni al reloj del ordenador, y que la fecha no cambia nunca. Que en sede.transportes.gob.es (la antigua sede.mitma.gob.es) la página «Fecha y hora oficial de la Sede» y las cabeceras de dos aplicaciones mueven el reloj con una petición que deja la página en suspenso, al arrancar y cada veinte segundos; y que la hora que el servidor escribe en esas dos cabeceras llegó vieja las dos veces que la miramos. Que las dos rutinas se llaman mueveReloj. Todo sigue igual el 14 de septiembre de 2026.
Lo que no decimosQue ninguna solicitud se haya presentado fuera de plazo por esto: no lo sabemos y no se ve desde fuera. Tampoco que la hora de Jaén esté mal: al abrir la página es correcta, la pone el servidor; lo que falla es todo lo que viene después del primer segundo. Ni que el servidor de Jaén no esté sincronizado con el Observatorio: puede que lo esté; lo que no está sincronizado con nada es el número que usted ve. Ni cuánto dura la pausa del Ministerio en su ordenador: depende de su red; nosotros medimos un cuarto de segundo desde la nuestra.
Procedencia

De dónde sale cada cita

Cada trozo de código de esta ficha está en un fichero guardado tal como lo entregó el servidor, con su huella (sha256) y su hora. Las citas entre «» se comprueban por programa contra ese fichero antes de publicar.