JavaScript/Objekte/Date/setDate

Aus SELFHTML-Wiki
< JavaScript‎ | Objekte‎ | Date
Wechseln zu: Navigation, Suche

Die Methode setDate() ändert den Monatstag, der in einem Datumsobjekt gespeichert ist. Der neue Monatstag ist als Parameter zu übergeben.


Syntax

dateObj.setDate(wert)

  • wert ist eine ganze Zahl zwischen 1 und 31.

Rückgabewert ist die Anzahl der Millisekunden zwischen dem 1. Januar 1970 00:00:00 UTC und dem geänderten Date-Objekt.


Beachten Sie: Wenn Sie eine offensichtlich zu große Tageszahl übergeben; z.B:
var neuesDatum  = new Date(2017, 1, 05); // 5.2.2017

neuesDatum.setDate(31);
console.log(neuesDatum.toLocaleDateString('de-DE')); // Ergebnis: 3.3.2017

wird das Datum ausgehend vom ersten Tag des Monats um die entsprechende Tageszahl vorgesetzt.

Übergeben Sie jedoch eine zu kleine Tageszahl, z.B.

var neuesDatum  = new Date(2017, 1, 05); // 5.2.2017

neuesDatum.setDate(0);
console.log(neuesDatum.toLocaleDateString('de-DE')); // Ergebnis: 31.1.2017

neuesDatum.setDate(-10);
console.log(neuesDatum.toLocaleDateString('de-DE')); // Ergebnis: 21.1.2017
so wird ausgehend vom letzten Tag des Vormonats die Tageszahl subtrahiert.

Anwendungsbeispiele

Beispiel ansehen …
function changeDate() {
  var gesetzt = new Date(),
  tag = parseInt(this.value);
  eingegeben.innerHTML = tag + ". " + monate[jetzt.getMonth()] + " " + jetzt.getFullYear();
		
  gesetzt.setDate(tag);
  resultierend.innerHTML = gesetzt.getDate() + ". " + monate[gesetzt.getMonth()] + " "
                         + gesetzt.getFullYear();
		
  eingegeben.className = eingegeben.innerHTML != resultierend.innerHTML ? "fehler" : "";
}

Das Beispiel erzeugt ein neues Datumsobjekt jetzt mit dem aktuellen Datum, dessen mit getDate() ermittelter Tageswert in einem Slider dargestellt wird.

Bei einer Eingabe eines neuen Werts im Slider wird dieser Wert als einmal dargestellt wie eingegeben, also ggf. unsinnig und einmal so, wie setDate() das Datum tatsächlich ermittelt.


Das Datum in 4 Wochen

Das oben beschriebene Springen in den nächsten Monat mag auf den ersten Blick wie ein Bug aussehen, ist bei der Berechnung von in der Zukunft liegenden Daten jedoch sehr nützlich, weil man sich bei Berechnungen nicht um einen eventuellen Monatswechsel kümmern muss.

Beim Ändern des Datums mit höheren Werten wird das Datum automatisch richtig ermittelt.

Beispiel ansehen …
function changeDate() {
  var gesetzt = new Date(),
      tage = parseInt(this.value);
				
  gesetzt.setDate(jetzt.getDate() + tage);
  resultierend.innerHTML = gesetzt.toLocaleDateString('de-DE');
		
  if (tage < 0) {
    label_resultierend.innerHTML = "vor " + (-1)*tage + " Tagen: ";
    if (tage == -1) {
      label_resultierend.innerHTML = "gestern: ";
    }
  }
  else if (tage > 0) {
    label_resultierend.innerHTML = "in " + tage + " Tagen: ";
    if (tage == 1) {
      label_resultierend.innerHTML = "morgen: ";
    }
  }
  else {
    label_resultierend.innerHTML = "heute: "
  }
}

Das Beispiel erzeugt ein neues Datumsobjekt jetzt mit dem aktuellen Datum, zu dessen mit getDate() ermitteltem Tageswert der Wert des Sliders addiert wird.

Diese Summe wird mit setDate() neu gesetzt und das neu gesetzte Datum und zum Vergleich das aktuelle Datum werden mit toLocaleDateString('de-DE'); formatiert und ausgegeben.


Siehe auch

Weblinks