Añadir un día a una fecha en JavaScript
Estoy seguro de que muchas personas hicieron esta pregunta, pero cuando revisé las respuestas me parece que están equivocadas en lo que encontré
var startDate = new Date(Date.parse(startdate));
//The start date is right lets say it is 'Mon Jun 30 2014 00:00:00'
var endDate = new Date(startDate.getDate() + 1);
// the enddate in the console will be 'Wed Dec 31 1969 18:00:00' and that's wrong it should be 1 july
Sé que .getDate() devuelve de 1 a 31, pero ¿el navegador o JavaScript solo aumenta el día sin actualizar el mes y el año?
¿Y en este caso debería escribir un algoritmo para manejar esto? ¿O hay otra manera?
Respuesta #1
Tenga en cuenta que Date.getDate solo devuelve el día del mes. Puede agregar un día llamando a Date.setDate y sumando 1.
// Create new Date instance
var date = new Date()
// Add a day
date.setDate(date.getDate() + 1)
JavaScript actualizará automáticamente el mes y el año por ti.
EDITAR:
Aquí tienes un enlace a una página donde puedes encontrar todas las cosas interesantes sobre el objeto Date incorporado y ver qué es posible: Date.
Respuesta #2
El constructor Date que toma un solo número espera el número de milisegundos desde el 31 de diciembre de 1969.
Date.getDate() devuelve el índice del día para el objeto de fecha actual. En tu ejemplo, el día es 30. La expresión final es 31, por lo tanto está devolviendo 31 milisegundos después del 31 de diciembre de 1969.
Una solución sencilla usando tu enfoque existente es utilizar Date.getTime() en su lugar. Luego, añade un número de milisegundos equivalente a un día en lugar de 1.
Por ejemplo,
var dateString = 'Mon Jun 30 2014 00:00:00';
var startDate = new Date(dateString);
// seconds * minutes * hours * milliseconds = 1 day
var day = 60 * 60 * 24 * 1000;
var endDate = new Date(startDate.getTime() + day);
JSFiddle
Tenga en cuenta que esta solución no maneja casos extremos relacionados con el horario de verano, los años bisiestos, etc. Siempre es un enfoque más rentable usar, en su lugar, una biblioteca de código abierto madura como moment.js para manejar todo.
Respuesta #3
Hay un problema con el 31 y el 28 de febrero con getDate(). Yo uso esta función getTime y 24*60*60*1000=86400000
Usa esta función:
function incrementDate(dateInput,increment) {
var dateFormatTotime = new Date(dateInput);
var increasedDate = new Date(dateFormatTotime.getTime() +(increment *86400000));
return increasedDate;
}
Ejemplo como el siguiente:
var dateWith31 = new Date("2017-08-31");
var dateWith29 = new Date("2016-02-29");
var amountToIncreaseWith = 1; //Edit this number to required input
console.log(incrementDate(dateWith31,amountToIncreaseWith));
console.log(incrementDate(dateWith29,amountToIncreaseWith));
function incrementDate(dateInput,increment) {
var dateFormatTotime = new Date(dateInput);
var increasedDate = new Date(dateFormatTotime.getTime() +(increment *86400000));
return increasedDate;
}