Tengo fecha futura y fecha actual. Ambas fechas son siempre el mismo día pero con horas diferentes. Mi objetivo es obtener la diferencia de segundos entre la fecha futura y la fecha actual como mi valor de cuenta regresiva para un temporizador. El problema es que cuando calculo obtengo resultados inexactos.
En mi fórmula de investigación para convertir milisegundos a segundos es millis / 1000.0 pero nada de esto devuelve un resultado de cuenta regresiva preciso;
Mi código
let now = (new Date().getTime() / 1000.0); let futureDate = (new Date('2022-04-01T17:41:47.000Z').getTime() / 1000.0); let difference; difference = (futureDate - now); // not accurate difference = parseInt(difference, 10); // not accurateMe gustaría que la solución funcione normalmente en todas las zonas horarias y que herede la zona horaria del sistema local en lugar de la zona horaria de fecha futura.
Cualquier ayuda será apreciada mucho.
Quiero verificar si sabe que los formatos de fecha como "0000-00-00T00: 00: 00.000Z" siempre se reconocen como hora universal (hora del Reino Unido).
Intente usar +HH:MM en lugar del último carácter Z.
Por ejemplo, si se encuentra en el este de EE. UU., sería "2022-04-01T17:41:47.000-05:00".
Debe agregar la zona horaria del sistema, así:
let date = new Date('2022-04-01T17:41:47.000Z'); let now = new Date().getTime() / 1000.0; let futureDate = (date.getTime() + date.getTimezoneOffset() * 60000) / 1000.0; let difference; difference = (futureDate - now); // not accurate difference = parseInt(difference, 10); // not accurate console.log(difference);La marca de tiempo '2022-04-01T17:41:47.000Z' se analizará como compensación +0 (también conocida como UTC o GMT) debido a la "Z" final, que denota una compensación de +0. La diferencia entre ahora y entonces en milisegundos es:
let diff = new Date('2022-04-01T17:41:47.000Z') - Date.now();donde un valor negativo para diff significa que la marca de tiempo está en el pasado. Para convertir la diferencia a segundos, divida el resultado por 1.000.
Si se ejecuta exactamente a la misma hora, el valor de diff será el mismo independientemente de la configuración del sistema para la compensación local (permitiendo, por supuesto, la precisión del reloj).
Para que la marca de tiempo se analice como local, elimine la Z:
let diff = new Date('2022-04-01T17:41:47.000') - Date.now();Sin embargo, eso cambia el instante en el tiempo representado por la marca de tiempo por el desplazamiento local, por lo que devolverá un valor diferente para diff para cada sistema con un desplazamiento diferente. Eso no parece algo sensato dado que la marca de tiempo tiene una compensación y, por lo tanto, pretende representar un solo instante en el tiempo, no uno de muchos instantes diferentes (tantos como compensaciones diferentes, tal vez cientos si las compensaciones históricas son incluido) dependiendo del desplazamiento del host.