Wie füge ich Stunden zu einem Datumsobjekt hinzu?

Lesezeit: 3 Minuten

Benutzer-Avatar
Jeff Fleischbällchen Yang

Es erstaunt mich, dass das Date-Objekt von JavaScript keinerlei Add-Funktion implementiert.

Ich möchte einfach eine Funktion, die dies tun kann:

var now = Date.now();
var fourHoursLater = now.addHours(4);

function Date.prototype.addHours(h) {

   // How do I implement this?

}

Ich hätte einfach gerne ein paar Hinweise in eine Richtung.

  • Muss ich String-Parsing durchführen?

  • Kann ich setTime verwenden?

  • Wie wäre es mit Millisekunden?

So was:

new Date(milliseconds + 4*3600*1000 /* 4 hours in ms */)?

Das scheint aber wirklich hackish zu sein – und funktioniert es überhaupt?

Benutzer-Avatar
Jason Harwig

JavaScript selbst hat schreckliche Datums-/Uhrzeit-APIs. Trotzdem können Sie dies in reinem JavaScript tun:

Date.prototype.addHours = function(h) {
  this.setTime(this.getTime() + (h*60*60*1000));
  return this;
}

  • Wenn Sie sagen, Sie würden eine Stunde hinzufügen, die dazu führt, dass sie auf den nächsten Tag übertragen wird, würde dies sie abfangen und alles richtig erhöhen (Tag, Monat, Jahr)?

    – cdoern

    14. Mai 2020 um 16:40 Uhr

  • @cdoern Ich denke, das würde es, da getTime() Millisekunden zurückgibt und Sie einfach weitere Millisekunden hinzufügen

    – Die1993

    3. Juni 2020 um 7:21 Uhr

  • Funktioniert perfekt im Jahr 2022! Danke !

    – Markus Berger

    vor 8 Stunden

Benutzer-Avatar
kennebec

Date.prototype.addHours= function(h){
    this.setHours(this.getHours()+h);
    return this;
}

Prüfen:

alert(new Date().addHours(4));

  • Ich glaube nicht, dass das funktioniert – testen Sie es zum Beispiel an etwas mit Stunde 23? Die Antwort von Jason Harwig kam mir in den Sinn.

    – Domenik

    25. Oktober 2010 um 16:08 Uhr

  • Es ist eine schlechte Praxis, Dinge zu einem Objektprototyp in Javascript hinzuzufügen, und Domenic hat recht, das funktioniert nicht. Die Lösung von Jason Harwig unten ist besser.

    – iKode

    6. Juli 2012 um 12:43 Uhr

  • @Domenic Das funktioniert gut mit 23:00, getestet in der JavaScript-Konsole von Firefox 10, Chrome 21 und IE 8/9. Hier der Code, den ich zum Testen verwendet habe: var date = new Date(2012, 10, 22, 23, 0, 1); date.toString(); // Thu Nov 22 2012 23:00:01 GMT+0100 (CET) date.setHours(date.getHours() + 1); date.toString(); // Fri Nov 23 2012 00:00:01 GMT+0100 (CET) Es funktioniert auch gut mit setMinutes()

    – Tanguy_k

    22. November 2012 um 0:19 Uhr


  • Bei dieser Lösung sind Probleme aufgetreten – Das Erhöhen um 1 ist für mich am DST-Umschaltpunkt fehlgeschlagen (Uhr um eine Stunde vorwärts stellen).

    – andrewb

    2. Oktober 2015 um 2:09 Uhr

  • Wurde auch davon gebissen – ich habe die Stunden mit setHours (getHours-1) durchlaufen: Jetzt, in der ersten DST-Stunde, endet dies in einer Endlosschleife. Überprüfen Sie also das Ergebnis!

    – cfstras

    14. März 2016 um 12:57 Uhr


Benutzer-Avatar
Peter Mortensen

Die von kennebec vorgeschlagene Version schlägt fehl, wenn Sie zu oder von wechseln Sommerzeitda es sich um die eingestellte Stundenzahl handelt.

this.setUTCHours(this.getUTCHours()+h);

werde hinzufügen h Stunden zu this unabhängig von Zeitsystem-Eigenheiten.

Die Methode von Jason Harwig funktioniert auch.

  • Ich glaube nicht, dass das funktioniert – testen Sie es zum Beispiel an etwas mit Stunde 23? Die Antwort von Jason Harwig kam mir in den Sinn.

    – Domenik

    25. Oktober 2010 um 16:08 Uhr

  • Es ist eine schlechte Praxis, Dinge zu einem Objektprototyp in Javascript hinzuzufügen, und Domenic hat recht, das funktioniert nicht. Die Lösung von Jason Harwig unten ist besser.

    – iKode

    6. Juli 2012 um 12:43 Uhr

  • @Domenic Das funktioniert gut mit 23:00, getestet in der JavaScript-Konsole von Firefox 10, Chrome 21 und IE 8/9. Hier der Code, den ich zum Testen verwendet habe: var date = new Date(2012, 10, 22, 23, 0, 1); date.toString(); // Thu Nov 22 2012 23:00:01 GMT+0100 (CET) date.setHours(date.getHours() + 1); date.toString(); // Fri Nov 23 2012 00:00:01 GMT+0100 (CET) Es funktioniert auch gut mit setMinutes()

    – Tanguy_k

    22. November 2012 um 0:19 Uhr


  • Bei dieser Lösung sind Probleme aufgetreten – Das Erhöhen um 1 ist für mich am DST-Umschaltpunkt fehlgeschlagen (Uhr um eine Stunde vorwärts stellen).

    – andrewb

    2. Oktober 2015 um 2:09 Uhr

  • Wurde auch davon gebissen – ich habe die Stunden mit setHours (getHours-1) durchlaufen: Jetzt, in der ersten DST-Stunde, endet dies in einer Endlosschleife. Überprüfen Sie also das Ergebnis!

    – cfstras

    14. März 2016 um 12:57 Uhr


Benutzer-Avatar
Richter Selorm Bruce

Ich denke, das sollte den Trick tun

 var nextHour  = Date.now() + 1000 * 60 * 60;

1010710cookie-checkWie füge ich Stunden zu einem Datumsobjekt hinzu?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy