jack moscovi
Leí en la documentación de moment.js que si desea agregar 1 mes a la fecha actual, puede usar este código:
var moment = require('moment');
var futureMonth = moment().add(1, 'M').format('DD-MM-YYYY');
Pero el problema es que esto no agrega la forma en que espero que lo haga. Por ejemplo, digamos que la fecha actual es 31/10/2015 (el último día del mes de octubre). En codigo:
var currentDate = moment().format('DD-MM-YYYY');
var futureMonth = moment().add(1, 'M').format('DD-MM-YYYY');
console.log(currentDate) // Result --> 31/10/2015
console.log(futureMonth) // Result --> 30/11/2015
Si observa la fecha del calendario, 1 mes/31 días desde el 31/10/2015 debería ser 1/12/2015 (el primer día de diciembre), no 30/11/2015 (el último día de noviembre).
¿Alguien podría ayudarme a solucionar este problema?
silencioso
var currentDate = moment('2015-10-30');
var futureMonth = moment(currentDate).add(1, 'M');
var futureMonthEnd = moment(futureMonth).endOf('month');
if(currentDate.date() != futureMonth.date() && futureMonth.isSame(futureMonthEnd.format('YYYY-MM-DD'))) {
futureMonth = futureMonth.add(1, 'd');
}
console.log(currentDate);
console.log(futureMonth);
EDITAR
moment.addRealMonth = function addRealMonth(d) {
var fm = moment(d).add(1, 'M');
var fmEnd = moment(fm).endOf('month');
return d.date() != fm.date() && fm.isSame(fmEnd.format('YYYY-MM-DD')) ? fm.add(1, 'd') : fm;
}
var nextMonth = moment.addRealMonth(moment());
-
Solo me preguntaba si este código es flexible. o simplemente soluciona el problema de la fecha actual 31/10/2015 – 1/12/2015?
– Jack Moscovi
30/10/2015 a las 16:47
-
Esto simplemente sale mal de otra manera: julio y agosto tienen 31 días. Cuando agrega un mes al 31 de julio, obtendrá el 1 de septiembre.
– Jamiec
30/10/2015 a las 16:48
-
Wow lo probé el último de enero que es el 31 y funciona perfectamente. ¡Gracias!
– Jack Moscovi
30/10/2015 a las 17:25
Según lo último doc puedes hacer lo siguiente-
Añadir un día
moment().add(1, 'days').calendar();
Agregar año
moment().add(1, 'years').calendar();
Añadir mes
moment().add(1, 'months').calendar();
-
esta respuesta es incorrecta y no agrega correctamente un mes de acuerdo con la solicitud anterior
– Eike Thies
6 de noviembre de 2019 a las 22:22
-
Probar
moment('2020-03-30').add(1, 'months')
y luego comparar conmoment('2020-03-31').add(1, 'months')
. El resultado será el mismo, lo cual es incorrecto.– Tomasz Kasperczyk
31 de marzo de 2020 a las 18:17
-
@TomaszKasperczyk pl. informe aquí – github.com/momento/momento/problemas
– Anoop M Maddasseri
2 de febrero de 2021 a las 13:11
Nishit
startDate = "20.03.2020";
var newDate = moment(startDate, "DD-MM-YYYY").add(5, 'days');
console.log(newDate)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
-
Si bien este código puede responder la pregunta, proporcionar contexto adicional sobre cómo y/o por qué resuelve el problema mejoraría el valor a largo plazo de la respuesta.
–Piotr Labunski
19 de marzo de 2020 a las 8:41
-
Dice agregar 1 mes y agregas 4 días
– Ahmet Firat Keler
3 de noviembre a las 14:08
Tu podrías intentar
moment().add(1, 'M').subtract(1, 'day').format('DD-MM-YYYY')
Supongo que lo que estás buscando es
moment().add(30, "days")
.– Vikram Deshmukh
30/10/2015 a las 16:39
¿Cuál es la regla que realmente quieres? ¿Es “Añadir el número de días en el mes actual“? ¿Es “Agregar 1 mes + 1 día”?
– Jamiec
30/10/2015 a las 16:51
parece que la definición en momentjs es que si tiene fin de mes y agrega 1 mes, lo hará al final del próximo mes. Lo cual me parece muy cuerdo y predecible.
– kio
30/10/2015 a las 17:07
Un mes no siempre tiene 30 días, por lo que
moment().add(30, "days")
no es técnicamente la respuesta correcta.– SSH Esto
31 de enero de 2017 a las 17:42
Por favor, no llames a las cosas no apropiadas como apropiadas. Sugiero cambiar el título de la pregunta de alguna manera. Actualmente es engañoso.
– alehro
1 jun 2017 a las 15:25