Estoy usando el siguiente enfoque para obtener el final de un trimestre:
function convertToMomentDates(dates) { return dates.map((date) => moment(date).tz("Europe/Rome")); } function getEndOfQuarter(dates) { const lastDate = dates.pop(); if (!lastDate || !lastDate.isValid()) return null; console.log(lastDate.endOf("quarter").format()); return lastDate.endOf("quarter").format(); } const dates = [ "2018-10-01T01:00:00+01:00", "2019-01-01T01:00:00+01:00", ]; const endOfQuarterResult = getEndOfQuarter(convertToMomentDates(dates)); console.log( endOfQuarterResult === "2019-03-31T23:59:59+01:00" ); document.getElementById('result').innerHTML = endOfQuarterResult; <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.14/moment-timezone-with-data.min.js"></script> <div id="result"></div>Quiero decir que estoy usando todas mis fechas con un desplazamiento de +1:00 y se cambia a +2:00 después de la función endOf, cuál sería la implementación correcta para no cambiar el desplazamiento...
En este caso, el resultado esperado está bien debido a la zona horaria de Italia/Roma al final de marzo, en este caso al final del último trimestre, la compensación cambia a +2. Se puede ver más información en esta URL: https://www.timeanddate.com/time/zone/italy/rome .