wake-up-neo.com

Inkrementieren eines Datums in JavaScript

Ich muss einen Datumswert in JavaScript um einen Tag erhöhen.

Ich habe beispielsweise 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?

322
Santanu

Drei Möglichkeiten für Sie:

1. Verwenden Sie nur das Date-Objekt von JavaScript (keine Bibliotheken):

Meine vorherige Antwort für # 1 war falsch (es wurden 24 Stunden hinzugefügt, wobei die Übergänge von und zur Sommerzeit nicht berücksichtigt wurden; Clever Human wies darauf hin, dass sie mit dem 7. November 2010 in der östlichen Zeitzone fehlschlagen würde). Stattdessen ist die Antwort von Jigar der richtige Weg, um dies ohne Bibliothek zu tun:

var tomorrow = new Date();
tomorrow.setDate(tomorrow.getDate() + 1);

Dies funktioniert auch für den letzten Tag eines Monats (oder Jahres), da das JavaScript-Datumsobjekt intelligent für das Rollover ist:

var lastDayOf2015 = new Date(2015, 11, 31);
snippet.log("Last day of 2015: " + lastDayOf2015.toISOString());
var nextDay = new Date(+lastDayOf2015);
var dateValue = nextDay.getDate() + 1;
snippet.log("Setting the 'date' part to " + dateValue);
nextDay.setDate(dateValue);
snippet.log("Resulting date: " + nextDay.toISOString());
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="//tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

(Diese Antwort wird derzeit akzeptiert, daher kann ich sie nicht löschen. Bevor sie angenommen wurde, schlug ich der OP vor, sie würden Jigar's akzeptieren, aber vielleicht akzeptierten sie diese für die Punkte Nr. 2 oder Nr. 3 auf der Liste.)

2. Verwenden von MomentJS :

var today = moment();
var tomorrow = moment(today).add(1, 'days');

(Beachten Sie, dass add die Instanz ändert, in der Sie sie aufrufen, anstatt eine neue Instanz zurückzugeben. today.add(1, 'days') würde today ändern. Deshalb beginnen wir mit einem Klonoperator für var tomorrow = ....)

3. Verwenden Sie DateJS , das jedoch seit langem nicht aktualisiert wurde:

var today = new Date(); // Or Date.today()
var tomorrow = today.add(1).day();
607
T.J. Crowder
var myDate = new Date();

//add a day to the date
myDate.setDate(myDate.getDate() + 1);
147
Jigar Joshi

Keines der Beispiele in dieser Antwort scheint mit den Tagen zur Einstellung der Sommerzeit zu funktionieren. An diesen Tagen beträgt die Anzahl der Stunden an einem Tag nicht 24 (sie sind 23 oder 25, je nachdem, ob Sie "vorspringen" oder "zurückfallen".)

Die unten stehende AddDays-JavaScript-Funktion 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());
29
Clever Human

Der einfachste Weg ist, in Millisekunden zu konvertieren und 1000 * 60 * 60 * 24 Millisekunden hinzuzufügen, z.

var tomorrow = new Date(today.getTime()+1000*60*60*24);
20

Morgen in einer Zeile in Pure JS, aber es ist hässlich !

new Date(new Date().setDate(new Date().getDate() + 1))

Hier ist das Ergebnis: 

Thu Oct 12 2017 08:53:30 GMT+0200 (Romance Summer Time)
12
jpmottin

Sie müssen Ihre Zeichenfolge zuerst analysieren, bevor Sie dem Vorschlag der anderen Personen folgen:

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 selben 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 hilft Ihnen alot .

11
einarmagnus

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 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)
2
Laksh Goel

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)
}
2
fitodac

Rufen Sie den Zeichenfolgenwert des Datums mit der dateObj.toJSON () - Methode ab. Ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toJSON . .Schneiden Sie das Datum aus dem zurückgegebenen Wert und erhöhen Sie dann die Anzahl der gewünschten Tage.

var currentdate = new Date();
currentdate.setDate(currentdate.getDate() + 1);
var tomorrow = currentdate.toJSON().slice(0,10);
1
phil
 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
0
swirekx

Datum des Jahres mit Vanilla js inkrementieren:

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

0
d1jhoni1b

const date = moment (). add (14, "days"). toDate () // hier addieren wir 14 Tage mit dem heutigen Tag

0
Kiran Debnath

Nicht ganz sicher, ob es ein BUG ist (Tested Firefox 32.0.3 und Chrome 38.0.2125.101), aber der folgende Code schlägt in Brasilien (-3 GMT) fehl:

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, wird es einwandfrei funktionieren (löst aber das Problem 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
0
Alan Weiss

Ergebnis in einer Zeichenfolgendarstellung des Datums von morgen. Verwenden Sie new Date (), um das heutige Datum abzurufen, einen Tag mithilfe von Date.getDate () und Date.setDate () hinzuzufügen und das Date-Objekt in eine Zeichenfolge zu konvertieren.

  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();
0
Gor