Necesito agregar 4 horas a la fecha de mi momento js. Así que para eso estoy usando
/* this timestamp is this date 27-03-2045 00:00 */ const someday = moment(2374178400000); const addedFourHours = someday.add(4, 'hours'); el 27 de marzo, el horario de verano ya pasó y se agregaron exactamente 4 horas y la fecha de finalización en addedFoursHours es el Mon Mar 27 2045 04:00:00 GMT+0200 .
Pero cuando pruebo la fecha en que sucede el horario de verano, por ejemplo, el 26 de marzo a la medianoche
/* this timestamp is this date 26-03-2045 00:00 */ const someday = moment(2374095600000); const addedFourHours = someday.add(4, 'hours'); luego obtengo Sun Mar 26 2045 05:00:00 GMT+0200 . En el caso anterior, obtuve la hora 04:00 cuando agregué 4 horas después de la medianoche. ¿Por qué en horario de verano obtengo la hora 05:00?
Como puedo resolver esto ?
Entonces, lo que desea no es sumar 4 horas, sino encontrar la próxima vez que las horas sean un múltiplo de 4.
Por lo tanto, elimine toda sugerencia de su código de que está agregando cuatro horas (cf. su nombre de variable).
Puedes hacerlo:
const someday = moment(2374095600000); console.log(someday.toString()); const hours = someday.hours(); someday.hours(hours + 4 - (hours % 4)); // Find next time that is multiple of 4. console.log(someday.toString()); <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.3/moment.min.js"></script>Desea agregar 3, 4 o 5 horas según la fecha, pero desea establecer valores específicos para las horas. Lea el valor de la hora, agregue 4 y establezca el valor:
const today = moment(2374178400000); const four = moment(today).hours(today.hour() + 4); const eight = moment(four).hours(four.hour() + 4); const twelve = moment(eight).hours(eight.hour() + 4); const sixteen = moment(twelve).hours(twelve.hour() + 4); const twenty = moment(sixteen).hours(sixteen.hour() + 4); const tomorrow = moment(twenty).hours(twenty.hour() + 4); console.log(today); console.log(four); console.log(eight); console.log(twelve); console.log(sixteen); console.log(twenty); console.log(tomorrow); <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.3/moment.min.js"></script>