¿Cómo puedo agregar 1 día a la fecha actual?

93

Tengo un objeto Date actual que debe incrementarse en un día usando el objeto Date de JavaScript. Tengo el siguiente código en su lugar:

var ds = stringFormat("{day} {date} {month} {year}", { 
                day: companyname.i18n.translate("day", language)[date.getUTCDay()], 
                date: date.getUTCDate(), 
                month: companyname.i18n.translate("month", language)[date.getUTCMonth()], 
                year: date.getUTCFullYear() 
});

¿Cómo puedo agregarle un día?

Agregué +1 a getUTCDay()y, getUTCDate()pero no muestra "Domingo" day, lo que espero que suceda.

frenético
fuente
1
¿Qué quieres decir con "añadir +1"? ¿Necesitas al día siguiente o algo más?
Aleks G
¿ date: (date.getUTCDate()+1)No funciona (funciona para mí)? Es posible que haya un conflicto de nomenclatura con date(como Fecha () - Objeto y como Clave de objeto. ¿Ha intentado llamar a la Fecha () - Objeto diferente?
Dominik Schreiber
actualmente solo aparece como: <option value = "2012-04-06"> Sáb 6 de abril de 2012 </option> <option value = "2012-04-07"> 7 de abril de 2012 </option>, no "Domingo 7 de abril de 2012 "
frenético
Así que no es lo 7 Aprque necesitas (lo que me es 'agregar al día siguiente'), es el Sunday. Recuerde agregar +1ambos en day:y date:(o, como menciona la respuesta actual, antes).
Dominik Schreiber

Respuestas:

237

Para agregar un día a un objeto de fecha:

var date = new Date();

// add a day
date.setDate(date.getDate() + 1);
RobG
fuente
Consulte la pregunta duplicada: stackoverflow.com/questions/3674539/… . Esta respuesta es buena, pero no tiene en cuenta el horario de verano. Hay 2 días del año que no tienen 24 horas.
Jess
2
@ Jess: depende de cómo desee que se representen los cambios sobre el horario de verano. La pregunta era cómo agregar uno a la fecha, eso es exactamente lo que hace la respuesta anterior. Agregar 24 horas no necesariamente incrementa esa fecha, agregar una a la fecha local usando setDate siempre lo hace.
RobG
Esto es lo que quiero decir. Incremento del 10 de marzo: var a = new Date("2013-03-10T00:00:00.000Z"); a.setDate(a.getDate() + 1); a.toISOString();es "2013-03-10T23:00:00.000Z". Este es un caso sutil en el que la función anterior no me funcionó.
Jess
1
¡Por supuesto no! Empieza con una hora UTC, luego, básicamente, la convierte a local, agrega un día y luego vuelve a convertirla a UTC. Entonces, se agregó un día a la fecha local , pero solo 23 horas a la hora UTC. Si agrega 1 a la fecha UTC, volverá a la 01:00:00 hora local. Ese comportamiento no es exclusivo del horario de verano, es una consecuencia del uso de tres zonas horarias diferentes.
RobG
8
Ajá No me di cuenta de que getDate se estaba convirtiendo de UTC a la hora local. a.setUTCDate(a.getUTCDate() + 1);<- que funciona con fechas zulúes.
Jess
40

En mi humilde opinión, la mejor manera es simplemente agregar un día completo en milisegundos, dependiendo de cómo factorices tu código, puede estropearse si estás en el último día del mes.

por ejemplo, el 28 de febrero o el 31 de marzo.

Aquí hay un ejemplo de cómo lo haría:

var current = new Date(); //'Mar 11 2015' current.getTime() = 1426060964567
var followingDay = new Date(current.getTime() + 86400000); // + 1 day in ms
followingDay.toLocaleDateString();

En mi opinión, esto asegura la precisión

aquí hay otro ejemplo no me gusta que puede funcionar para usted pero no tan limpio esa dosis de la anterior

var today = new Date('12/31/2015');
var tomorrow = new Date(today);
tomorrow.setDate(today.getDate()+1);
tomorrow.toLocaleDateString();

en mi humilde opinión, esto === 'POOP'

Algunos de ustedes han tenido quejas sobre mi enfoque de milisegundos debido al horario de verano. Así que voy a criticar esto. Primero, algunos países y estados no tienen horario de verano. Segundo Agregar exactamente 24 horas es un día completo. Si la dosis del número de fecha no cambia una vez al año, pero luego se corrige 6 meses después, no veo ningún problema allí. Pero con el propósito de ser definitivo y tener que lidiar con el malvado Date () lo he pensado detenidamente y ahora odio a Date. Entonces este es mi nuevo enfoque

var dd = new Date(); // or any date and time you care about 
var dateArray =  dd.toISOString().split('T')[0].split('-').concat( dd.toISOString().split('T')[1].split(':') );
// ["2016", "07", "04", "00", "17", "58.849Z"] at Z 

¡Ahora viene la parte divertida!

var date = { 
    day: dateArray[2],
    month: dateArray[1],
    year: dateArray[0],
    hour: dateArray[3],
    minutes: dateArray[4],
    seconds:dateArray[5].split('.')[0],
    milliseconds: dateArray[5].split('.')[1].replace('Z','')
}

ahora tenemos nuestro Objeto de Fecha Internacional Válido Oficial claramente escrito en el meridiano Zulú. Ahora para cambiar la fecha

  dd.setDate(dd.getDate()+1); // this gives you one full calendar date forward
  tomorrow.setDate(dd.getTime() + 86400000);// this gives your 24 hours into the future. do what you want with it.
Pedro el ruso
fuente
Agregar segundos / milisegundos no funcionará para el horario de verano.
Matt H
@ Matt H ¿De dónde sacaste esa idea? El tiempo se establece en UTC en milisegundos desde el 01/01/1970
Peter the Russian
1
Será el día siguiente en hora UTC, sí, pero no necesariamente en hora local. El día de Spring Forward en los EE. UU., Hay 25 horas en el día. Entonces, si tiene, por ejemplo, 31/03/15 a las 00:00 horas, y agrega 86400000 milisegundos, en el día de Sprint Forward, la hora local sería 31/03/15 a las 23:00 horas, ya que ese día tiene 25 horas.
Matt H
3
puede ver el efecto así:var dte = Date.parse('2015-11-01'); console.log(dte); dte.setTime(dte.getTime() + 86400000 ); console.log(dte);
Matt H
1
Esto está sobre-diseñado. Si tiene un problema como este, utilice un momento de biblioteca o algo que le ayude a facilitar las cosas.
Joshua Michael Waggoner
11

Si desea agregar un día (24 horas) a la fecha y hora actual, puede agregar milisegundos como este:

new Date(Date.now() + ( 3600 * 1000 * 24))
Pablo Andres Diaz Mazzaro
fuente
9
int days = 1;
var newDate = new Date(Date.now() + days*24*60*60*1000);

CodePen

var days = 2;
var newDate = new Date(Date.now()+days*24*60*60*1000);

document.write('Today: <em>');
document.write(new Date());
document.write('</em><br/> New: <strong>');
document.write(newDate);

Sarga
fuente
La adición de un día de milisegundos falla porque no todos los días duran 24 horas en los lugares que observan el horario de verano. Por ejemplo, Chile finaliza el horario de verano a la medianoche a principios del 14 de mayo de 2017. Los relojes retrocederán desde la medianoche hasta las 23:00. Entonces, agregar 24 horas a 2017-05-13 00:00:00 producirá 2017-05-13 23:00:00 y la fecha no cambia (algunos navegadores lo harán exactamente a la medianoche, otros un milisegundo después) . :-(
RobG
2

Inspirado por jpmottin en esta pregunta , aquí está el código de una línea:

var dateStr = '2019-01-01';
var days = 1;

var result = new Date(new Date(dateStr).setDate(new Date(dateStr).getDate() + days));

document.write('Date: ', result); // Wed Jan 02 2019 09:00:00 GMT+0900 (Japan Standard Time)
document.write('<br />');
document.write('Trimmed Date: ', result.toISOString().substr(0, 10)); // 2019-01-02

Espero que esto ayude

Jee Mok
fuente
-3
currentDay = '2019-12-06';
currentDay = new Date(currentDay).add(Date.DAY, +1).format('Y-m-d');
Paul Wolbers
fuente
¿Que es esto? ¿Estás usando una biblioteca?
remborg