Necesito incrementar un valor de fecha en un día en JavaScript.
Por ejemplo, tengo un valor de fecha 2010-09-11 y necesito almacenar la fecha del día siguiente en una variable de JavaScript.
¿Cómo puedo incrementar una fecha por un día?
Necesito incrementar un valor de fecha en un día en JavaScript.
Por ejemplo, tengo un valor de fecha 2010-09-11 y necesito almacenar la fecha del día siguiente en una variable de JavaScript.
¿Cómo puedo incrementar una fecha por un día?
Respuestas:
Tres opciones para ti:
Date
objeto de JavaScript (sin bibliotecas):Mi respuesta anterior para el n. ° 1 fue incorrecta (agregó 24 horas, al no tener en cuenta las transiciones hacia y desde el horario de verano; Clever Human señaló que fallaría con el 7 de noviembre de 2010 en la zona horaria del Este). En cambio, la respuesta de Jigar es la forma correcta de hacer esto sin una biblioteca:
var tomorrow = new Date();
tomorrow.setDate(tomorrow.getDate() + 1);
Esto funciona incluso durante el último día de un mes (o año), porque el objeto de fecha de JavaScript es inteligente sobre la renovación:
(Esta respuesta se acepta actualmente, por lo que no puedo eliminarla. Antes de que fuera aceptada, le sugerí al OP que aceptaran Jigar's, pero tal vez aceptaron esta para los artículos # 2 o # 3 en la lista).
var today = moment();
var tomorrow = moment(today).add(1, 'days');
(Tenga en cuenta que add
modifica la instancia a la que la llama, en lugar de devolver una nueva instancia, por today.add(1, 'days')
lo que modificaría today
. Es por eso que comenzamos con una operación de clonación var tomorrow = ...
).
var today = new Date(); // Or Date.today()
var tomorrow = today.add(1).day();
Date
constructor ( new Date(year, month, date)
); ver sección 15.9.2.1 de la especificación ; si quieres aceptar una variedad de formatos, definitivamente echa un vistazo a DateJS .
Date.parse
(lo que devuelve una cantidad de milisegundos que luego puede alimentar new Date(ms)
). Pero cuidado, eso puede variar de un navegador a otro. Hasta hace poco, las implementaciones podían hacer casi cualquier cosa que quisieran Date.parse
. La nueva especificación de la quinta edición ahora tiene un formato mínimo que debe aceptarse, pero todavía no contaría con eso.
x = new Date(); x2 = new Date(x.getTime() + 1000)
, donde 1000 es un incremento de milisegundos.
Date
Los objetos son mutables. Estás almacenando el mismo Date
objeto tres veces en la matriz. Si desea tres Date
objetos diferentes , debe crear tres objetos:var unavailableDates = []; for (var d = new Date('2017-05-11'); d < new Date('2017-05-13'); d.setDate(d.getDate() + 1)) { unavailableDates.push(new Date(+d)); }
var myDate = new Date();
//add a day to the date
myDate.setDate(myDate.getDate() + 1);
new Date("2009-09-11")
pero Firefox no. Creo que la mayoría de los navegadores aceptan, new Date("2009/09/11")
por lo que sería una solución fácil var arrivalDate = document.getElementById('arival_date').value; var dayAfter = new Date(arrival_date.replace(/-/g, '/')); dayAfter.setDate(dayAfter.getDate()+1);
.
-
con /
y con la esperanza de que los navegadores lo aceptarán, sería dividir la cadena en partes: var dateParts = arrivalDate.split('-'); var y = parseInt(dateParts[0], 10); var m = parseInt(dateParts[1], 10); var d = parseInt(dateParts[2], 10); var dayAfter = new Date(y, m-1, d+1);
Tenga en cuenta que estamos utilizando m-1
aquí, porque meses JavaScript son los valores de enumeración (que enero es 0, no 1), y d+1
porque ya está haciendo el incremento en la asignación inicial (se corregirá automáticamente el 29 de febrero, etc.)
Ninguno de los ejemplos en esta respuesta parece funcionar con los días de ajuste del horario de verano. En esos días, el número de horas en un día no es 24 (son 23 o 25, dependiendo de si está "saltando" o "retrocediendo").
La siguiente función AddDays javascript representa el horario de verano:
function addDays(date, amount) {
var tzOff = date.getTimezoneOffset() * 60 * 1000,
t = date.getTime(),
d = new Date(),
tzOff2;
t += (1000 * 60 * 60 * 24) * amount;
d.setTime(t);
tzOff2 = d.getTimezoneOffset() * 60 * 1000;
if (tzOff != tzOff2) {
var diff = tzOff2 - tzOff;
t += diff;
d.setTime(t);
}
return d;
}
Estas son las pruebas que utilicé para probar la función:
var d = new Date(2010,10,7);
var d2 = AddDays(d, 1);
document.write(d.toString() + "<br />" + d2.toString());
d = new Date(2010,10,8);
d2 = AddDays(d, -1)
document.write("<hr /><br />" + d.toString() + "<br />" + d2.toString());
d = new Date('Sun Mar 27 2011 01:59:00 GMT+0100 (CET)');
d2 = AddDays(d, 1)
document.write("<hr /><br />" + d.toString() + "<br />" + d2.toString());
d = new Date('Sun Mar 28 2011 01:59:00 GMT+0100 (CET)');
d2 = AddDays(d, -1)
document.write("<hr /><br />" + d.toString() + "<br />" + d2.toString());
La forma más fácil es convertir a milisegundos y agregar 1000 * 60 * 60 * 24 milisegundos, por ejemplo:
var tomorrow = new Date(today.getTime()+1000*60*60*24);
1000*60*60*24
xDaysToBeAdded
new Date(+new Date() + 1000*60*60*24)
pero en realidad es similar a getTime()
/ setTime()
, realmente.
new Date(Date.now()+1000*60*60*24);
Primero debe analizar su cadena antes de seguir la sugerencia de otras personas:
var dateString = "2010-09-11";
var myDate = new Date(dateString);
//add a day to the date
myDate.setDate(myDate.getDate() + 1);
Si lo desea nuevamente en el mismo formato, deberá hacerlo "manualmente":
var y = myDate.getFullYear(),
m = myDate.getMonth() + 1, // january is month 0 in javascript
d = myDate.getDate();
var pad = function(val) { var str = val.toString(); return (str.length < 2) ? "0" + str : str};
dateString = [y, pad(m), pad(d)].join("-");
Pero sugiero obtener Date.js como se menciona en otras respuestas, eso te ayudará mucho .
Siento que nada es más seguro que .getTime()
y .setTime()
, por lo tanto, este debería ser el mejor y el mejor rendimiento también.
const d = new Date()
console.log(d.setTime(d.getTime() + 1000 * 60 * 60 * 24)) // MILLISECONDS
.setDate()
para una fecha no válida (como 31 + 1) es demasiado peligroso y depende de la implementación del navegador.
Obteniendo los próximos 5 días:
var date = new Date(),
d = date.getDate(),
m = date.getMonth(),
y = date.getFullYear();
for(i=0; i < 5; i++){
var curdate = new Date(y, m, d+i)
console.log(curdate)
}
Dos métodos:
1:
var a = new Date()
// no_of_days is an integer value
var b = new Date(a.setTime(a.getTime() + no_of_days * 86400000)
2: similar al método anterior
var a = new Date()
// no_of_days is an integer value
var b = new Date(a.setDate(a.getDate() + no_of_days)
Obtenga el valor de cadena de la fecha utilizando el método dateObj.toJSON () Ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toJSON Corte la fecha de la devolución valor y luego incremente por la cantidad de días que desee.
var currentdate = new Date();
currentdate.setDate(currentdate.getDate() + 1);
var tomorrow = currentdate.toJSON().slice(0,10);
Date.prototype.AddDays = function (days) {
days = parseInt(days, 10);
return new Date(this.valueOf() + 1000 * 60 * 60 * 24 * days);
}
Ejemplo
var dt = new Date();
console.log(dt.AddDays(-30));
console.log(dt.AddDays(-10));
console.log(dt.AddDays(-1));
console.log(dt.AddDays(0));
console.log(dt.AddDays(1));
console.log(dt.AddDays(10));
console.log(dt.AddDays(30));
Resultado
2017-09-03T15:01:37.213Z
2017-09-23T15:01:37.213Z
2017-10-02T15:01:37.213Z
2017-10-03T15:01:37.213Z
2017-10-04T15:01:37.213Z
2017-10-13T15:01:37.213Z
2017-11-02T15:01:37.213Z
No estoy completamente seguro si es un ERROR (Probado Firefox 32.0.3 y Chrome 38.0.2125.101), pero el siguiente código fallará en Brasil (-3 GMT):
Date.prototype.shiftDays = function(days){
days = parseInt(days, 10);
this.setDate(this.getDate() + days);
return this;
}
$date = new Date(2014, 9, 16,0,1,1);
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");
Resultado:
Fri Oct 17 2014 00:01:01 GMT-0300
Sat Oct 18 2014 00:01:01 GMT-0300
Sat Oct 18 2014 23:01:01 GMT-0300
Sun Oct 19 2014 23:01:01 GMT-0200
Agregar una hora a la fecha hará que funcione perfectamente (pero no resuelve el problema).
$date = new Date(2014, 9, 16,0,1,1);
Resultado:
Fri Oct 17 2014 01:01:01 GMT-0300
Sat Oct 18 2014 01:01:01 GMT-0300
Sun Oct 19 2014 01:01:01 GMT-0200
Mon Oct 20 2014 01:01:01 GMT-0200
Resultados en una representación de cadena de la fecha de mañana. Use la nueva Fecha () para obtener la fecha de hoy, agregue un día usando Date.getDate () y Date.setDate () y convierta el objeto Date en una cadena.
const tomorrow = () => {
let t = new Date();
t.setDate(t.getDate() + 1);
return `${t.getFullYear()}-${String(t.getMonth() + 1).padStart(2, '0')}-${String(
t.getDate()
).padStart(2, '0')}`;
};
tomorrow();
Incrementando el año de la fecha con vanilla js:
start_date_value = "01/01/2019"
var next_year = new Date(start_date_value);
next_year.setYear(next_year.getYear() + 1);
console.log(next_year.getYear()); //=> 2020
En caso de que alguien quiera incrementar otro valor que no sea la fecha (día)
A través de JS nativo, para agregar un día, puede hacer lo siguiente:
let date = new Date(); // today
date.setDate(date.getDate() + 1) // tomorrow
Otra opción es usar la moment
biblioteca:
const date = moment().add(14, "days").toDate()
Incremento de fecha de ahorro de zona horaria / horario de verano para fechas de JavaScript:
function nextDay(date) {
const sign = v => (v < 0 ? -1 : +1);
const result = new Date(date.getTime());
result.setDate(result.getDate() + 1);
const offset = result.getTimezoneOffset();
return new Date(result.getTime() + sign(offset) * offset * 60 * 1000);
}