BandaAncha

  • 🔍 en 📰 artículos ⏎
  • 🔍 en 💬 foros ⏎
  • 🔍 en 👇 este 💬 foro ⏎
  • 🔍 en 👇 este 💬 tema ⏎
Regístrate Regístrate Identifícate Identifícate
Bugs/Devel

Petición de nueva funcionalidad: soporte a la zona horaria del navegador

txuspe

Por cuestiones laborales viajo a países en zonas horarias alejadas de la nuestra. Estando allí resulta complicado hacerse una idea de cuándo se han publicado los últimos mensajes del foro porque siempre se muestran en la zona horaria de Madrid. Cuando han pasado menos de cuatro horas está bien porque se muestran en el formato relativo "hace 40 minutos" que es independiente de la zona horaria, pero cuando pasan más de cuatro horas se muestran como "hoy 11:25" o "ayer a las 16:15", lo cual complica bastante las cosas.

Por ejemplo, la web vista desde Madrid y desde GMT-8 (nótese el reloj en la esquina superior izquierda):

/store/txuspe/hora/ba-mad.png
/store/txuspe/hora/ba-gmt-8.png

El mensaje del foro Euskaltel fue publicado hoy a las 11:53 cuando todavía son las 7:38. Es complicado tener que hacer el cambio de hora para hacerse una idea.

Mi petición de mejora sería añadir una etiqueta "time" al código de manera que la hora pueda ser legible por máquinas y después procesarla en Javascript según la zona horaria del navegador. Me he tomado la libertad de preparar una pequeña prueba de concepto con la propuesta utilizando la librería Moment.js por simplicidad, pero por supuesto se podría hacer con código propio:

/store/txuspe/hora/propuesta-mad.png
/store/txuspe/hora/propuesta-gmt-8.png

De esta forma, si el navegador no soporta Javascript todo seguiría igual que ahora, pero si lo soporta se traduciría a su zona horaria.

El código está en /store/txuspe/hora/hora.html

Gracias por tu atención, Josh.

Josh

Hola Txuspe. Lo tengo en cuenta y lo miraré en las próximas reformas que quiero hacer, ya que antes tengo que subir la reforma del editor, que está ya casi lista. Gracias por la sugerencia ;)

🗨️ 14
BocaDePez

Hay un bug bastante curioso en el editor actual y es que el contador de caracteres no va porque la expresión regular que tienes puesta es /(Dispones de )([\.\d]+)( caracteres)/ pero desde hace tiempo los miles aparecen con una coma así que no lo pilla y no se actualiza.

🗨️ 11
NetSpot

Mmmm, dependerá del navegador. Mis miles llevan punto.

Esto de aquí abajo es una captura.

ba.png
🗨️ 7
BocaDePez

Interesante. Mi hipótesis es que esta web usa una función de JavaScript que formatea el número dependiendo de la configuración del sistema. Yo tengo todos mis sistemas en inglés y en inglés los millares se separan con coma. @Josh

🗨️ 6
Josh
Josh
NetSpot
NetSpot
🗨️ 3
BocaDePez
BocaDePez
🗨️ 2
NetSpot
NetSpot
🗨️ 1
BocaDePez
BocaDePez
Josh

Curioso. Lo miro.

🗨️ 1
BocaDePez

Todavía sigue igual

Josh

Arreglado. En unas horas lo subo.

txuspe

Aprovechando el reflote, he visto que ya has implementado las etiquetas HTML time aunque no se está haciendo la conversión local. Sinceramente, para mí es suficiente así. Me hago una extensión de Firefox que las traduzca a hora local y listo, no necesito más.

Solamente te pediría añadir la etiqueta a un par de sitios que falta: en la portada, el apartado de arriba ("nuevo en foros") y la página principal de los foros (lista de todos los foros). He creado esta pequeña extensión para que sea más fácil identificar dónde está y dónde no: /store/txuspe/hora/highlight_time_0.2.xpi (para instalarlo hay que bajarlo y luego cargarlo como complemento temporal dado que no está firmado).

🗨️ 1
NetSpot

Aprovechando el reflote, he visto que ya has implementado las etiquetas HTML

El atributo datetime lleva tiempo utilizándose. De hecho, yo me hice en su día un script para que al pasar el ratón por encima de los "hace X tiempo", en vez de que me diga que es la última respuesta, me diga el día y la hora exacta (toLocaleString()) de publicación.

Raro que es uno XD, pero es que el title "última respuesta" no ayuda mucho, como no lo hace el texto "hace X tiempo" (supongamos que navegas por la web en modo desconectado o que llevas un buen rato sin actualizar la página; no aporta nada el saber ese "hace x tiempo"). Y ya que está el atributo, pues se aprovecha.

Pero, bueno, son rarezas mías :P

P . S.: ya siento haber reflotado el tema :S

P . S.2: por cierto Josh, el editor considera los P. de los P.S. como listas, debería ocurrir sólo con dígitos

Limontodo

No tengo mucha idea de programación, pero hay un vídeo del canal de Youtube "guinxu" (programador de videojuegos) en el explica algo parecido, es de hace 2 semanas y se titula: «juego solo se buguea en algunos países?! »

P.D. No pongo el link por si está prohibido

NetSpot

Estaba yo ahora cambiando la hora en varios foros en que lo tengo que hacer manualmente (no reconocen el cambio según las opciones de usuario (que van desde el panel de sus webs, como la disponibilidad de JS en el navegador, hasta…)) y me he acordado de esta web y este hilo.

Diréis, ¿y por qué me he acordado?

Porque una de las cosas que más asco me da de la forma en la que muestran la hora, coja la configuración de usuario automáticamente o manualmente, es que cambian la hora de todos los mensajes respecto de esa configuración. Es decir, si yo ayer publique un mensaje en X web a las 13:25, hoy aparece, con la suma del horario de verano, como que lo publiqué a las 14:25. Lo cual quita totalmente la fidelidad porque a esa hora de ese día, igual, ni estaba en casa. Algo parecido a lo que hace Windows (no sé si en versiones recientes lo habrán cambiado), que cuando cambia la hora, ahora en Marzo, dice que ayer creaste un archivo una hora después de cuando lo hiciste.

Bueno, pero que me enrollo.

En este sentido me es una grata sorpresa que esta web guarda la hora en formato completo y la fecha y hora son persistentes al momento de su publicación, lo que da fidelidad. Eso sí, la conversión se realiza en servidor. Y de hecho, me parece lo mejor, porque si empezamos a tomar opciones de usuario o datos provistos por el navegador, ya empiezan las cosas a salir mal, porque lo que se cuenta entonces es la diferencia de la zona horaria más la DST. De la misma manera que hay una función en javascript para obtener el timezoneoffset, no sé por qué no la hay en Date() para sólo la timezone del sistema.

Paradojas de la vida, mi navegador al menos, guarda en el historial en GMT (epoch) y convierte a la hora real del momento de la visita, es decir, si era GMT+diferencia horaria, pues esa, y si es GMT+diferencia+DST, pues a esa.

No entiendo porque no pueden hacer como los clientes de correo y que muestren la hora en función del momento en el que se produjo el evento. Y cito los clientes de correo porque la hora en el código fuente de la web, si no me equivoco, está codificada basándose en los RFCs de los correos.

¿Y por qué toda esta parrafada?

Porque si se hace algo la fecha no debe ser generada dinámicamente con JavaScript porque perdería fidelidad para mensajes pasados. Y si se toma por opciones en el perfil de usuario, que esa opción no tenga en cuenta el DST (o sea, no se actualice en función de lo que diga el navegador, porque a la zona horaria devuelta suma el DST, y el DST, o la diferencia horaria total, sería mejor decir, ya está en la hora que devuelve el servidor del mensaje original), sólo la zona y, en función de la fecha del año, la web añada la diferencia DST. Es mejor que no se guarde en el servidor la hora UTC/GMT, porque se vuelve al punto de partida de la ausencia de fidelidad horaria. Lo que da fidelidad es el cómo se guarda ahora la fecha.

Los boca de pez se quedarían fuera, pero creo que es un precio justo por la fidelidad de tiempo. Si acaso, poner alguna opción por cookie en el que el usuario anónimo provea su zona horaria. Y quien no quiera más que cookies de sesión, a lo mucho, pues no le tocará otra que estar metiendo la diferencia horaria continuamente. Pero creo que la mayoría de boca de pez, y en general de los usuarios, es que estamos en +1, así que podría encargarse el servidor de hacerlo como ahora. Que sólo se haga un cambio con los usuarios registrados que lo hayan cambiado como decía antes. Y sólo la zona horaria, sin tener en cuenta el DST. La diferencia DST sólo debería de ser añadida si el mensaje original fue publicado en meses de verano (suponiendo que la zona horaria provista también tiene DST). ¿Y esto no es lo mismo que hacerlo automáticamente?, no, porque así sólo se aplica el cambio a los mensajes que necesitaría un ajuste DST, pero no a los de invierno, como hacen mal la mayoría de foros ahí fuera, si no todos. (Creo que me he repetido con esto último XD)

Sea como sea, establecer automáticamente la zona horaria del usuario, no, porque es imposible de saber con lo que devuelve el navegador y es que no se debe aplicar la diferencia horaria a todos los mensajes.

Todo sea por la fidelidad de tiempo, y tal cual está ahora, un 10 a BandaAncha. Espero que encuentres la mejor forma Josh.

🗨️ 2
NetSpot

De hecho, estoy pensando que la DST no hay necesidad de sumarla, tal cual se guarda hoy la hora en la web. Sólo es necesaria la zona horaria para sumar o restar. Tal cual hacen los clientes de correo.

NetSpot

Ya que se revive hoy el hilo otra vez, y a pesar de la parrafada que me pegué, estuve probando con una de estas webs que también tiene el tag time con su atributo datetime en ISO, como aquí, porque quería ver si se podía hacer que me mostrase la hora real, aunque tuviera que montar un monstruo de script y, para mi sorpresa, JavaScript lo convierte correctamente. No hace falta que el usuario establezca una zona horaria.

Se ve que lee el formato con la diferencia horaria 2020-04-05T00:23+02:00 (formato ISO) y no hace ningun ajuste extra de DST. Es decir, si ahora estuvieramos en horario de invierno, esa fecha no sería cambiada a 04/04/2020 23:23 en GMT+1. Como debe ser. Ajustaría sólo a la hora que le corresponda de zona horaria, pero teniendo en cuenta internamente el momento de publicación.

Así que se podría implementar sin problemas.