Estoy usando moment js para convertir la hora del sistema del usuario a la zona horaria especificada por el usuario según su preferencia. La zona horaria del sistema del usuario es IST y está especificando una zona horaria diferente. Para configurar lo mismo que estoy usando
moment.tz.setDefault("Pacific/Pago_Pago");Pero en uno de los escenarios obtengo fechas diferentes. Si lo hago
moment().startOf('day')
Recibo la fecha de hoy como jueves 28 de octubre de 2021 00:00:00 GMT+0530 (hora estándar de la India) , pero si lo estoy haciendo
moment(endDate).startOf('day')Recibo el jueves 27 de octubre de 2021 00:00:00 GMT+0530 (hora estándar de India) Donde la fecha de finalización es el resultado de la última declaración, es decir, el jueves 28 de octubre de 2021 00:00:00 GMT+0530 (hora estándar de India)
Lo que estoy haciendo mal aquí.
La zona horaria utilizada cuando se crea un objeto de momento permanece como parte del objeto y se utiliza para el procesamiento posterior. El efecto descrito ocurrirá si se cambia la zona horaria predeterminada después de que se crea el objeto de momento inicial.
P.ej
// Set default to IST (+5:30) moment.tz.setDefault('Asia/Kolkata'); // Create initial moment using default timezone let start = moment().startOf('day'); // Changing the default here doesn't affect above moment moment.tz.setDefault('Pacific/Pago_Pago'); // This still uses the initial +5:30 offset, not -11:00 for Pago Pago let timestamp = start.toString(); // This uses the timestamp for the original timezone, but // then gets start of day in new default timezone let end = moment(timestamp).startOf('day'); console.log( `Start: ${start.toString()}\nEnd : ${end.toString()}` ); <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.9.0/moment-with-locales.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.31/moment-timezone-with-data-10-year-range.js"></script>