He estado leyendo durante días sobre zonas horarias y compensaciones, pero parece que no puedo resolver esto.
Tengo una aplicación de cuestionarios en la que el cliente tiene 5 minutos para resolver un cuestionario. Cuando el cliente envía una solicitud para iniciar la prueba, el servidor registra la hora de inicio de la prueba como ese instante y la end_time start_time start_time + 5min .
Este end_time se envía al navegador, que luego muestra un temporizador de cuenta regresiva al cliente calculando la diferencia entre current_time y end_time del navegador. El problema es que la current_time del navegador es diferente en diferentes dispositivos, incluso si están en la misma zona horaria. Si un dispositivo está 2 minutos por delante de la hora estándar de su zona horaria, su prueba finaliza 2 minutos antes que cualquier otro dispositivo.
Intenté usar la hora UTC universalmente, tanto en el servidor como en el cliente, sin embargo, en el mismo instante exacto, luxon.DateTime.utc() devuelve una hora diferente en cada dispositivo. La hora de mi teléfono está 2 minutos por delante de la hora de mi computadora portátil, por lo que DateTime.utc() devuelve, en mi teléfono, una hora que está 2 minutos por delante de la de mi computadora portátil. No quiero que la hora del dispositivo se convierta a UTC, quiero un marco de referencia de tiempo absoluto que no varíe con la hora del dispositivo.
No encontré la respuesta a cómo se puede implementar el método que mencioné anteriormente, pero encontré otra forma de implementar el temporizador.
En lugar de que el servidor envíe la end_time al navegador, el servidor envía la hora remaining_time , que es end_time-server_current_time . El cliente recibe este remaining_time y establece la cuenta regresiva para el client_current_time+remaining_time .