Estoy tratando de sincronizar la hora de mi aplicación cliente con la hora de mi servidor (importa porque la aplicación no tiene servidor y funciona sin conexión). En el inicio de la aplicación, calculo la diferencia horaria y luego anulo el método Date.now() para agregar la diferencia al original ahora. Por ejemplo, suponga este código:
Date.__serverDifference = calculateServerDifference(); Date.__now = Date.now; Date.now = () => Date.__now() + Date.__serverDifference; y funciona bien Pero el problema es sobre otras funcionalidades de Fecha. Por ejemplo, si uso new Date() , devolverá la hora original y no le importa el método anulado ahora.
Como dice la documentación de MDN:
Los objetos de fecha de JavaScript representan un momento único en el tiempo en un formato independiente de la plataforma. Los objetos de fecha contienen un número que representa milisegundos desde el 1 de enero de 1970 UTC.
¿Hay alguna forma de anular la clase de fecha js para devolver todos los tiempos actuales de acuerdo con este nuevo cálculo?
El mejor enfoque sería crear métodos auxiliares que incluyan el desplazamiento de todas las funciones para las que las funciones integradas no devuelven el valor deseado. Your Date.__now es un comienzo, pero también podrías tener:
const offset = calculateServerDifference(); const newDateIncludingOffset = (...args) => { const date = new Date(...args); date.setMilliseconds(date.getMilliseconds() + offset); return date; }; Y luego reemplace todas las instancias de new Date(...args) con newDateIncludingOffset(...args) . Si ya tiene muchas referencias a la new Date , muerda la bala y cámbielas adecuadamente.
Si bien puede cambiar los métodos en el prototipo, no es una buena idea : usar sus propias funciones y métodos sin cambiar los elementos integrados es un enfoque mucho mejor.
También puede reemplazar window.Date por completo con algo nuevo, con sus propios métodos, lo que le permite cambiar el constructor de Fecha para tener en cuenta el desplazamiento que necesita, pero nuevamente, esa no es una gran idea y puede conducir a un código frágil y problemas de incompatibilidad.