Wie kann ich dem aktuellen Datum 1 Tag hinzufügen?

86

Ich habe ein aktuelles Datumsobjekt, das mithilfe des JavaScript-Datumsobjekts um einen Tag erhöht werden muss. Ich habe den folgenden Code installiert:

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

Wie kann ich einen Tag hinzufügen?

Ich habe +1 hinzugefügt getUTCDay()und getUTCDate()es wird nicht "Sonntag" angezeigt day, was ich erwarte.

hektisch
quelle
1
Was meinst du mit "+1 hinzufügen"? Benötigen Sie den nächsten Tag oder etwas anderes?
Aleks G
Funktioniert date: (date.getUTCDate()+1)nicht (funktioniert bei mir)? Es ist möglich, dass es einen Namenskonflikt mit date(als Date () - Objekt und als Objektschlüssel gibt. Haben Sie versucht, das Datum () - Objekt anders aufzurufen?
Dominik Schreiber
Derzeit wird es nur angezeigt als: <option value = "2012-04-06"> Sa 6 Apr 2012 </ option> <option value = "2012-04-07"> 7 Apr 2012 </ option>, no "Sonntag 7. April 2012 "
hektisch
Es ist also nicht das 7 Apr, was du brauchst (was mir am nächsten Tag hinzugefügt wird), es ist das Sunday. Denken Sie daran, +1sowohl in day:als auch date:(oder, wie in der aktuellen Antwort erwähnt, zuvor) hinzuzufügen .
Dominik Schreiber

Antworten:

222

So fügen Sie einem Datumsobjekt einen Tag hinzu:

var date = new Date();

// add a day
date.setDate(date.getDate() + 1);
RobG
quelle
Siehe doppelte Frage: stackoverflow.com/questions/3674539/… . Diese Antwort ist gut, berücksichtigt aber nicht die Sommerzeit. Es gibt 2 Tage im Jahr, die keine 24 Stunden haben.
Jess
2
@ Jess - es hängt davon ab, wie Änderungen über der Sommerzeit dargestellt werden sollen. Bei der Frage wurde gefragt, wie man dem Datum eine hinzufügt. Genau das bewirkt die obige Antwort. Das Hinzufügen von 24 Stunden erhöht dieses Datum nicht unbedingt, das Hinzufügen eines Datums zum lokalen Datum mit setDate immer.
RobG
Hier ist was ich meine. Inkrementierung 10. März: var a = new Date("2013-03-10T00:00:00.000Z"); a.setDate(a.getDate() + 1); a.toISOString();ist "2013-03-10T23:00:00.000Z". Dies ist ein subtiler Fall, in dem die obige Funktion bei mir nicht funktioniert hat.
Jess
1
Natürlich nicht! Sie beginnen mit einer UTC-Zeit, konvertieren sie dann im Wesentlichen in eine lokale Zeit, fügen einen Tag hinzu und konvertieren sie dann wieder in UTC. So wurde ein Tag zum lokalen Datum hinzugefügt , aber nur 23 Stunden zur UTC-Zeit. Wenn Sie dem UTC-Datum 1 hinzufügen, erhalten Sie 01:00:00 Ortszeit zurück. Dieses Verhalten betrifft nicht nur die Sommerzeit, sondern ist die Folge der Verwendung von drei verschiedenen Zeitzonen.
RobG
8
Aha. Ich wusste nicht, dass getDate von UTC in Ortszeit konvertiert. a.setUTCDate(a.getUTCDate() + 1);<- das funktioniert mit Zulu-Daten.
Jess
38

Meiner bescheidenen Meinung nach ist es am besten, einen ganzen Tag in Millisekunden hinzuzufügen, je nachdem, wie Sie Ihren Code berücksichtigen, kann dies zu Problemen führen, wenn Sie am letzten Tag des Monats sind.

Zum Beispiel am 28. Februar oder am 31. März.

Hier ist ein Beispiel, wie ich es machen würde:

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

Dies gewährleistet die Genauigkeit

Hier ist ein weiteres Beispiel, das ich nicht mag, kann für Sie arbeiten, aber nicht so sauber, dass die oben genannte Dosis

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

imho this === 'POOP'

Einige von Ihnen hatten wegen der Sommerzeit Probleme mit meinem Millisekunden-Ansatz. Also werde ich das verprügeln. Erstens haben einige Länder und Staaten keine Sommerzeit. Zweitens Das Hinzufügen von genau 24 Stunden ist ein ganzer Tag. Wenn sich die Datumsnummer nicht einmal im Jahr ändert, sondern 6 Monate später behoben wird, sehe ich dort kein Problem. Aber um definitiv zu sein und mit dem bösen Date () umgehen zu müssen, habe ich mir das überlegt und hasse Date jetzt gründlich. Das ist also mein neuer Ansatz

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 

Nun zum lustigen Teil!

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

Jetzt haben wir unser offiziell gültiges internationales Datumsobjekt deutlich am Zulu-Meridian ausgeschrieben. Nun, um das Datum zu ändern

  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.
Peter der Russe
quelle
Das Hinzufügen von Sekunden / Millisekunden funktioniert nicht für die Sommerzeit.
Matt H
@Matt H Woher hast du diese Idee? Die Zeit wird in UTC in Millisekunden vom 01.01.1970 eingestellt
Peter der Russe
1
Es wird der folgende Tag in UTC-Zeit sein, ja, aber nicht unbedingt in Ortszeit. Am Spring Forward-Tag in den USA gibt es 25 Stunden am Tag. Wenn Sie also z. B. 31.03.15 um 00:00 Uhr haben und am Sprint Forward-Tag 86400000 Millisekunden hinzufügen, ist die Ortszeit der 31.03.15 um 23:00 Uhr, da an diesem Tag 25 Stunden liegen.
Matt H
3
Sie können den Effekt wie folgt sehen:var dte = Date.parse('2015-11-01'); console.log(dte); dte.setTime(dte.getTime() + 86400000 ); console.log(dte);
Matt H
1
Dies ist überentwickelt. Wenn Sie ein Problem wie dieses haben, verwenden Sie eine Bibliothek wie Moment oder etwas, um die Dinge einfacher zu machen.
Joshua Michael Waggoner
10

Wenn Sie der aktuellen Datumszeit einen Tag (24 Stunden) hinzufügen möchten, können Sie Millisekunden wie folgt hinzufügen:

new Date(Date.now() + ( 3600 * 1000 * 24))
Pablo Andres Diaz Mazzaro
quelle
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
quelle
Das Hinzufügen eines Millisekunden-Tages schlägt fehl, da nicht alle Tage an Orten mit Sommerzeit 24 Stunden lang sind. ZB beendet Chile die Sommerzeit am 14. Mai 2017 um Mitternacht. Die Uhr läuft von Mitternacht bis 23:00 Uhr zurück. Wenn Sie also 24 Stunden zu 2017-05-13 00:00:00 hinzufügen, wird 2017-05-13 23:00:00 angezeigt, und das Datum ändert sich nicht (einige Browser tun dies genau um Mitternacht, andere eine Millisekunde später). . :-(
RobG
1

Inspiriert von jpmottin in dieser Frage , hier ist der einzeilige Code:

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

Hoffe das hilft

Jee Mok
quelle
-2
currentDay = '2019-12-06';
currentDay = new Date(currentDay).add(Date.DAY, +1).format('Y-m-d');
Paul Wolbers
quelle
Was ist das? Verwenden Sie eine Bibliothek?
Remborg