Comment puis-je ajouter 1 jour à la date actuelle?

93

J'ai un objet Date actuel qui doit être incrémenté d'un jour à l'aide de l'objet Date JavaScript. J'ai le code suivant en place:

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() 
});

Comment puis-je y ajouter un jour?

J'ai ajouté +1 à getUTCDay()et getUTCDate()mais il n'affiche pas «dimanche» pour day, ce que je m'attends à ce qu'il se produise.

frénétique
la source
1
Qu'entendez-vous par "ajouter +1"? Avez-vous besoin du lendemain ou autre chose?
Aleks G
Ne date: (date.getUTCDate()+1)fonctionne pas (fonctionne pour moi)? Il est possible qu'il y ait un conflit de dénomination avec date(comme Date () - Object et comme Object-Key. Avez-vous essayé d'appeler Date () - Object différent?
Dominik Schreiber
actuellement, il n'apparaît que comme suit: <option value = "2012-04-06"> Sam 6 avril 2012 </option> <option value = "2012-04-07"> 7 avril 2012 </option>, no "dimanche 7 avril 2012 "
franticfrantic
Donc ce n'est pas ce dont 7 Aprvous avez besoin (ce qui est pour moi «ajouter le lendemain»), c'est le Sunday. N'oubliez pas d'ajouter les +1deux dans day:et date:(ou, comme l'indique la réponse actuelle, avant).
Dominik Schreiber

Réponses:

238

Pour ajouter un jour à un objet de date:

var date = new Date();

// add a day
date.setDate(date.getDate() + 1);
RobG
la source
Voir la question en double: stackoverflow.com/questions/3674539/… . Cette réponse est bonne, mais ne tient pas compte de l'heure d'été. Il y a 2 jours de l'année qui n'ont pas 24 heures.
Jess
2
@ Jess - cela dépend de la façon dont vous voulez que les modifications par rapport à l'heure d'été soient représentées. La question demandait comment en ajouter un à la date, c'est exactement ce que fait la réponse ci-dessus. L'ajout de 24 heures n'incrémente pas nécessairement cette date, mais l'ajout d'une date locale à l'aide de setDate le fait toujours.
RobG
Voici ce que je veux dire. Incrémentation du 10 mars: var a = new Date("2013-03-10T00:00:00.000Z"); a.setDate(a.getDate() + 1); a.toISOString();est "2013-03-10T23:00:00.000Z". C'est un cas subtil où la fonction ci-dessus n'a pas fonctionné pour moi.
Jess
1
Bien sûr que non! Vous commencez par une heure UTC, puis vous la convertissez essentiellement en heure locale, ajoutez un jour, puis convertissez-la en UTC. Un jour a donc été ajouté à la date locale , mais seulement 23 heures à l'heure UTC. Si vous ajoutez 1 à la date UTC, vous obtiendrez 01:00:00 heure locale. Ce comportement n'est pas propre à l'heure d'été, c'est une conséquence de l'utilisation de trois fuseaux horaires différents.
RobG
8
Aha. Je ne savais pas que getDate convertissait l'heure UTC en heure locale. a.setUTCDate(a.getUTCDate() + 1);<- cela fonctionne avec les dates zoulou.
Jess
40

À mon humble avis, le meilleur moyen est d'ajouter simplement une journée complète en millisecondes, selon la façon dont vous factorisez votre code, cela peut gâcher si vous êtes le dernier jour du mois.

par exemple le 28 février ou le 31 mars.

Voici un exemple de la façon dont je le ferais:

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

imo cela assure l'exactitude

voici un autre exemple je n'aime pas cela peut fonctionner pour vous mais pas aussi propre que la dose ci-dessus

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

à mon humble avis === 'POOP'

Donc, certains d'entre vous ont eu des reproches à propos de mon approche à la milliseconde à cause de l'heure d'été. Alors je vais dénigrer ça. Premièrement, certains pays et états ne disposent pas de l'heure de la lumière du jour. Deuxième Ajouter exactement 24 heures est une journée complète. Si la dose de numéro de date ne change pas une fois par an, mais est ensuite fixée 6 mois plus tard, je ne vois pas de problème. Mais dans le but d'être précis et d'avoir à faire face à la mauvaise Date (), j'ai réfléchi à cela et maintenant je déteste complètement Date. C'est donc ma nouvelle approche

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 

Maintenant pour la partie amusante!

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','')
}

maintenant, nous avons notre objet de date international valide officiel clairement écrit au méridien zoulou. Maintenant pour changer la date

  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.
Pierre le Russe
la source
L'ajout de secondes / millisecondes ne fonctionnera pas pour l'heure d'été.
Matt H
@Matt H d'où vous vient cette idée. L'heure est réglée en UTC en millisecondes à partir du 01/01/1970
Peter the Russian
1
Ce sera le jour suivant à l'heure UTC, oui, mais pas nécessairement à l'heure locale. Le jour de Spring Forward aux États-Unis, il y a 25 heures dans la journée. Donc, si vous avez par exemple 31/03/15 à 00:00 heures, et ajoutez 86400000 millisecondes, le jour Sprint Forward, l'heure locale serait le 31/03/15 à 23h00 car il y a 25 heures dans cette journée.
Matt H
3
vous pouvez voir l'effet comme ceci:var dte = Date.parse('2015-11-01'); console.log(dte); dte.setTime(dte.getTime() + 86400000 ); console.log(dte);
Matt H
1
C'est sur-conçu. Si vous rencontrez un problème comme celui-ci, utilisez une bibliothèque comme moment ou quelque chose pour vous faciliter la tâche.
Joshua Michael Wagoner
11

Si vous voulez ajouter un jour (24 heures) à la date / heure actuelle, vous pouvez ajouter des millisecondes comme ceci:

new Date(Date.now() + ( 3600 * 1000 * 24))
Pablo Andres Diaz Mazzaro
la source
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);

Serge
la source
L'ajout d'un jour de millisecondes échoue car tous les jours ne durent pas 24 heures dans les endroits qui observent l'heure d'été. Par exemple, le Chili met fin à l'heure d'été à minuit le 14 mai 2017. Les horloges reviendront de minuit à 23h00. Donc, ajouter 24 heures au 13/05/2017 00:00:00 produira 2017-05-13 23:00:00, et la date ne changera pas (certains navigateurs le feront exactement à minuit, d'autres une milliseconde après) . :-(
RobG
2

Inspiré par jpmottin dans cette question , voici le code en une ligne:

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

J'espère que cela t'aides

Jee Mok
la source
-3
currentDay = '2019-12-06';
currentDay = new Date(currentDay).add(Date.DAY, +1).format('Y-m-d');
Paul Wolbers
la source
Qu'est-ce que c'est? Utilisez-vous une bibliothèque?
remborg le