Ich möchte ein Datumsobjekt erhalten, das 30 Minuten später als ein anderes Datumsobjekt ist. Wie mache ich das mit JavaScript?
javascript
date
date-manipulation
Morgan Cheng
quelle
quelle
date.setMinutes(date.getMinutes() + ...)
werden die Grenzen der Sommerzeit nicht überschreiten. Zum Beispiel (vorausgesetzt, '2014-03-09' ist eine Sommerzeitgrenze):var d = new Date('2014-03-09 01:59:00'), f = new Date(d.getTime()); d.setMinutes(d.getMinutes() + 30);
d
ist jetzt 30 Minuten früher, nicht später alsf
.f
und druckend
, sehen Sie, dass einer "GMT-0500" sagt, der andere "GMT-0400" (oder was auch immer Ihre Zeitzone ist). Wenn Sie.getTime()
beidef
und aufrufend
, werden Sie feststellen, dass diesef
größer alsd
(dh später) ist.01:89
würde werden02:29
, was an dem Tag nicht existiert, an dem du "vorwärts springst". Chrome entscheidet, dass dies sein soll01:29
, FF entscheidet sich dafür03:29
. In der Nacht, in der Sie "zurückfallen", überspringen beide Browser die "zurückfallen" -Stunde und springen um 90 Minuten vorwärts, um02:29
. Hier sind einige JSFiddle-Demos: "spring forward" / "fall back"Antworten:
Verwenden einer Bibliothek
Wenn Sie viel Datumsarbeit leisten, sollten Sie sich JavaScript- Datumsbibliotheken wie Datejs oder Moment.js ansehen . Bei Moment.js ist dies beispielsweise einfach:
Vanille-Javascript
Dies ist wie die Antwort des Chaos , aber in einer Zeile:
Wo
diff
ist der Unterschied in Minuten, den Sie vonoldDateObj
der Zeit möchten ? Es kann sogar negativ sein.Oder als wiederverwendbare Funktion, wenn Sie dies an mehreren Stellen tun müssen:
Und nur für den Fall, dass dies nicht offensichtlich ist, multiplizieren wir Minuten mit
60000
Minuten in Millisekunden.Seien Sie vorsichtig mit Vanilla Javascript. Termine sind schwer!
Sie denken vielleicht, Sie können einem Datum 24 Stunden hinzufügen, um das Datum von morgen zu erhalten, oder? Falsch!
Es stellt sich heraus, dass ein Tag nicht unbedingt 24 Stunden lang ist, wenn der Benutzer die Sommerzeit einhält. Es gibt einen Tag im Jahr, der nur 23 Stunden lang ist, und einen Tag im Jahr, der 25 Stunden lang ist. In den meisten USA und Kanada ist der 2. November 2014 24 Stunden nach Mitternacht noch der 2. November:
Aus diesem Grund ist die Verwendung einer der oben genannten Bibliotheken sicherer, wenn Sie viel damit arbeiten müssen.
Unten ist eine allgemeinere Version dieser Funktion, die ich geschrieben habe. Ich würde immer noch empfehlen, eine Bibliothek zu verwenden, aber das kann für Ihr Projekt übertrieben / unmöglich sein. Die Syntax ist der MySQL DATE_ADD- Funktion nachempfunden .
Arbeitende jsFiddle-Demo .
quelle
quelle
Date
Objekte.var d = new Date(); d.setMinutes(d.getMinutes() + 30);
quelle
setTime
ein numerischer Millisekunden-Zeitstempel zurückgegeben wird, kein Datumsobjekt. (Denken Sie nicht, dass Sie einen Einzeiler machen können.)var in30Mins = new Date(+new Date() + 1.8e6)
ist ein Einzeiler, aber nicht sicher, ob es besser ist als ein Zweiliner. ;-)quelle
setMinutes
gibt den Zeitstempel zurück,now
bleibt aber dasDate
Objekt,now = new Date(now)
ist also veraltetVielleicht so etwas?
quelle
Date
Objekte.var d = new Date(); d.setMinutes(d.getMinutes() + 30);
If a parameter you specify is outside of the expected range, setMinutes() attempts to update the date information in the Date object accordingly.
Ich erstelle immer 7 Funktionen, um mit dem Datum in JS zu arbeiten: addSeconds, addMinutes, addHours, addDays, addWeeks, addMonths, addYears.
Sie können hier ein Beispiel sehen: http://jsfiddle.net/tiagoajacobi/YHA8x/
Wie benutzt man:
Dies sind die Funktionen:
quelle
date.addHours(3, 30)
3 Stunden und 30 Minuten hinzufügen konnten . addYears würde Jahre, Monate und Tage dauern, addMonths würde Monate und Tage dauern, addMinutes würde Minuten, Sekunden, Millisekunden usw.new Date().addHours(4).addMinutes(45);
Sie können so viele aufrufen, wie Sie möchten, da die Methoden "this" zurückgeben, das das aktuelle Datumsobjekt ist.var dt = new Date();
danndt.addMinutes(45); dt.addHours(4);
oder sogardt.addMinutes(285);
oder auchdt.addMinutes(45).addHours(4);
alle werden funktionieren. Wenn Sie eine Frage mit einem Codebeispiel haben, können Sie diese für Ihr Problem hier posten. Ich helfe Ihnen gerne weiter.Der einfachste Weg zu lösen ist zu erkennen, dass in Javascript Daten nur Zahlen sind. Es beginnt
0
oder'Wed Dec 31 1969 18:00:00 GMT-0600 (CST)
. Jeder1
repräsentiert eine Millisekunde. Sie können Millisekunden addieren oder subtrahieren, indem Sie den Wert abrufen und mit diesem Wert ein neues Datum instanziieren. Mit diesem Verstand können Sie es ziemlich einfach schaffen.quelle
Das mache ich, was ziemlich gut zu funktionieren scheint:
Dann können Sie das einfach so nennen:
quelle
return new Date(this.getTime() + minutes * 60000);
, ich das vorläufige kopierte Datum ist nicht notwendig. ;-)Hier ist die ES6- Version:
Nennen Sie es wie:
quelle
Ich bin der Meinung, dass vielen der Antworten hier eine kreative Komponente fehlt, die für Zeitreiseberechnungen dringend benötigt wird. Ich präsentiere meine Lösung für eine zeitliche Übersetzung von 30 Minuten.
(jsfiddle hier )
quelle
Für die Faulen wie mich:
Kips Antwort (von oben) in Coffeescript unter Verwendung einer "Aufzählung" und Bearbeitung desselben Objekts:
quelle
Verwenden Sie eine vorhandene Bibliothek, die dafür bekannt ist, die mit Zeitberechnungen verbundenen Macken zu bewältigen. Mein aktueller Favorit ist moment.js .
quelle
Nur eine weitere Option, die ich geschrieben habe:
DP_DateExtensions-Bibliothek
Es ist übertrieben, wenn dies die gesamte Datumsverarbeitung ist, die Sie benötigen, aber es wird tun, was Sie wollen.
Unterstützt Datums- / Zeitformatierung, Datumsberechnung (Hinzufügen / Subtrahieren von Datumsteilen), Datumsvergleich, Datumsanalyse usw. Es ist großzügig Open Source.
quelle
Sie könnten dies tun:
quelle
Hier ist mein Einzeiler:
quelle
Sie sollten den Wert des aktuellen Datums abrufen, um das Datum mit (ms) abzurufen, und (30 * 60 * 1000) hinzufügen. Jetzt haben Sie (aktuelles Datum + 30 min) mit ms
quelle
Ich weiß, dass das Thema viel zu alt ist. Aber ich bin mir ziemlich sicher, dass es einige Entwickler gibt, die das noch brauchen, also habe ich dieses einfache Skript für Sie erstellt. Ich hoffe du genießt es!
quelle