Estoy tratando de obtener la próxima "fecha de renovación" de un modelo de suscripción (mes y año). Esa es mi configuración:
var getPeriod = 'month'; // var getPeriod = 'year'; var getEffective = '2022-06-02'; var getDate = moment('2022-08-01'); if(getPeriod == 'month'){ var getDuration = moment.duration(getDate.diff(getEffective)).months(); } else if('year'){ var getDuration = moment.duration(getDate.diff(getEffective)).years(); } if(getDuration >= 0){ var getCounter = getDuration+1; } else { var getCounter = 1; } var getRenewalNext = moment(getEffective).add(getCounter, getPeriod+'s').format('YYYY-MM-DD'); console.log('getDuration:'); console.log(getDuration); console.log('getRenewalNext:'); console.log(getRenewalNext);Intento 1: Correcto
var getEffective = '2022-06-01'; var getDate = moment('2022-08-01'); "getDuration:" 2 "getRenewalNext:" "2022-09-01"Intento 2: Correcto
var getEffective = '2022-06-03'; var getDate = moment('2022-08-01'); "getDuration:" 1 "getRenewalNext:" "2022-08-03"Intento 3: incorrecto
var getEffective = '2022-06-02'; var getDate = moment('2022-08-01'); "getDuration:" 2 "getRenewalNext:" "2022-09-02"Para el último intento, obtengo "2022-09-02" como los próximos datos de renovación, pero hubiera esperado que faltara 1 día más y que la "Próxima fecha de renovación" fuera "2022-08-02". ¿Por qué o me estoy perdiendo algo? ¿Como puedo resolver esto?
Ese es mi violín: https://jsfiddle.net/ja1k6owb/
Actualizar a una versión más nueva de moment debería resolver el problema.
Estoy usando la última versión a continuación y estamos obteniendo la respuesta correcta.
Uno debería poder encontrar el cambio realizado (entre el momento 2.2.1 y 2.29.4) que soluciona el problema.
var getPeriod = 'month'; // var getPeriod = 'year'; var getEffective = '2022-06-02'; var getDate = moment('2022-08-01'); if(getPeriod == 'month'){ var getDuration = moment.duration(getDate.diff(getEffective)).months(); } else if('year'){ var getDuration = moment.duration(getDate.diff(getEffective)).years(); } if(getDuration >= 0){ var getCounter = getDuration+1; } else { var getCounter = 1; } var getRenewalNext = moment(getEffective).add(getCounter, getPeriod+'s').format('YYYY-MM-DD'); console.log('getDuration:'); console.log(getDuration); console.log('getRenewalNext:'); console.log(getRenewalNext); .as-console-wrapper { max-height: 100% !important; } <script src="https://momentjs.com/downloads/moment.js"></script>