Ich muss einen Datumswert in JavaScript um einen Tag erhöhen.
Zum Beispiel habe ich einen Datumswert 2010-09-11 und muss das Datum des nächsten Tages in einer JavaScript-Variablen speichern.
Wie kann ich ein Datum um einen Tag erhöhen?
Ich muss einen Datumswert in JavaScript um einen Tag erhöhen.
Zum Beispiel habe ich einen Datumswert 2010-09-11 und muss das Datum des nächsten Tages in einer JavaScript-Variablen speichern.
Wie kann ich ein Datum um einen Tag erhöhen?
Antworten:
Drei Optionen für Sie:
Date
Objekt (keine Bibliotheken):Meine vorherige Antwort für Nummer 1 war falsch (sie fügte 24 Stunden hinzu und berücksichtigte keine Übergänge zur und von der Sommerzeit; Clever Human wies darauf hin, dass sie mit dem 7. November 2010 in der östlichen Zeitzone fehlschlagen würde). Stattdessen ist Jigars Antwort der richtige Weg, dies ohne Bibliothek zu tun:
var tomorrow = new Date();
tomorrow.setDate(tomorrow.getDate() + 1);
Dies funktioniert sogar für den letzten Tag eines Monats (oder Jahres), da das JavaScript-Datumsobjekt beim Rollover klug ist:
(Diese Antwort wird derzeit akzeptiert, daher kann ich sie nicht löschen. Bevor sie akzeptiert wurde, schlug ich dem OP vor, Jigars zu akzeptieren, aber vielleicht haben sie diese für die Punkte 2 oder 3 auf der Liste akzeptiert.)
var today = moment();
var tomorrow = moment(today).add(1, 'days');
(Beachten Sie, dass add
die Instanz, auf der Sie sie aufrufen , geändert wird, anstatt eine neue Instanz zurückzugeben. Dies today.add(1, 'days')
würde sich ändern today
. Deshalb beginnen wir mit einer Klonoperation var tomorrow = ...
.)
var today = new Date(); // Or Date.today()
var tomorrow = today.add(1).day();
Date
Konstruktor ( new Date(year, month, date)
) einspeisen. siehe Abschnitt 15.9.2.1 der Spezifikation ; Wenn Sie eine Reihe von Formaten akzeptieren möchten, schauen Sie sich auf jeden Fall DateJS an .
Date.parse
(was eine Anzahl von Millisekunden zurückgibt, in die Sie dann eingeben können new Date(ms)
). Aber Vorsicht, das kann von Browser zu Browser unterschiedlich sein. Bis vor kurzem konnten Implementierungen fast alles tun, was sie wollten Date.parse
. Die neue Spezifikation der 5. Ausgabe hat jetzt ein Mindestformat, das akzeptiert werden muss, aber darauf würde ich noch nicht zählen.
x = new Date(); x2 = new Date(x.getTime() + 1000)
, wobei 1000 ein Millisekunden-Inkrement ist.
Date
Objekte sind veränderlich. Sie speichern dasselbe Date
Objekt dreimal im Array. Wenn Sie drei verschiedene Date
Objekte möchten , müssen Sie drei Objekte erstellen: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")
, Firefox jedoch nicht. Ich denke, die meisten Browser akzeptieren new Date("2009/09/11")
so eine einfache Lösung var arrivalDate = document.getElementById('arival_date').value; var dayAfter = new Date(arrival_date.replace(/-/g, '/')); dayAfter.setDate(dayAfter.getDate()+1);
.
-
durch /
und das Hoffen, dass Browser dies akzeptieren, besteht darin, die Zeichenfolge in Teile zu unterteilen: 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);
Beachten Sie, dass wir m-1
hier verwenden, da Javascript-Monate Enum-Werte sind (Januar 0, nicht 1) und d+1
weil wir Ich mache die Inkrementierung bereits in der anfänglichen Zuweisung (sie wird automatisch für den 29. Februar usw. korrigiert)
Keines der Beispiele in dieser Antwort scheint mit Tagen zur Anpassung der Sommerzeit zu funktionieren. An diesen Tagen beträgt die Anzahl der Stunden an einem Tag nicht 24 (23 oder 25, je nachdem, ob Sie "vorwärts springen" oder "zurückfallen").
Die folgende Javascript-Funktion von AddDays berücksichtigt die Sommerzeit:
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;
}
Hier sind die Tests, mit denen ich die Funktion getestet habe:
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());
Am einfachsten ist es, in Millisekunden zu konvertieren und 1000 * 60 * 60 * 24 Millisekunden hinzuzufügen, z.
var tomorrow = new Date(today.getTime()+1000*60*60*24);
1000*60*60*24
xDaysToBeAdded
new Date(+new Date() + 1000*60*60*24)
aber es ist tatsächlich ähnlich wie getTime()
/ setTime()
, wirklich.
new Date(Date.now()+1000*60*60*24);
Sie müssen zuerst Ihre Zeichenfolge analysieren, bevor Sie dem Vorschlag der anderen Personen folgen können:
var dateString = "2010-09-11";
var myDate = new Date(dateString);
//add a day to the date
myDate.setDate(myDate.getDate() + 1);
Wenn Sie es wieder im gleichen Format haben möchten, müssen Sie dies "manuell" tun:
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("-");
Aber ich schlage vor, Date.js zu bekommen, wie in anderen Antworten erwähnt, das wird Ihnen sehr helfen .
Ich bin der Meinung, dass nichts sicherer ist als .getTime()
und .setTime()
, daher sollte dies das Beste und auch das Performanteste sein.
const d = new Date()
console.log(d.setTime(d.getTime() + 1000 * 60 * 60 * 24)) // MILLISECONDS
.setDate()
Ein ungültiges Datum (wie 31 + 1) ist zu gefährlich und hängt von der Browser-Implementierung ab.
Die nächsten 5 Tage bekommen:
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)
}
Zwei Methoden:
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: Ähnlich wie bei der vorherigen Methode
var a = new Date()
// no_of_days is an integer value
var b = new Date(a.setDate(a.getDate() + no_of_days)
Holen Sie sich den String - Wert des Datums mit dem dateObj.toJSON () -Methode Ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toJSON Scheibe das Datum aus dem zurück Wert und erhöhen Sie dann um die Anzahl der gewünschten Tage.
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);
}
Beispiel
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));
Ergebnis
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
Nicht ganz sicher, ob es sich um einen BUG handelt (Tested Firefox 32.0.3 und Chrome 38.0.2125.101), aber der folgende Code schlägt in Brasilien fehl (-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+"");
Ergebnis:
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
Wenn Sie dem Datum eine Stunde hinzufügen, funktioniert es einwandfrei (löst das Problem jedoch nicht).
$date = new Date(2014, 9, 16,0,1,1);
Ergebnis:
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
Ergibt eine Zeichenfolgendarstellung des morgigen Datums. Verwenden Sie new Date (), um das heutige Datum abzurufen, fügen Sie mit Date.getDate () und Date.setDate () einen Tag hinzu und konvertieren Sie das Date-Objekt in eine Zeichenfolge.
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();
Inkrementieren des Datumsjahres mit Vanille 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
Nur für den Fall, dass jemand einen anderen Wert als das Datum (Tag) erhöhen möchte
Über native JS können Sie eines Tages Folgendes hinzufügen:
let date = new Date(); // today
date.setDate(date.getDate() + 1) // tomorrow
Eine andere Option ist die Verwendung der moment
Bibliothek:
const date = moment().add(14, "days").toDate()
Datumsinkrement für Zeitzone / Sommerzeit für JavaScript-Daten:
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);
}