Ich möchte ein Datumsobjekt erhalten, das 30 Minuten später als ein anderes Datumsobjekt ist. Wie kann ich das mit JavaScript erreichen?
Antworten
Zu viele Anzeigen?Verwenden Sie eine vorhandene Bibliothek, von der bekannt ist, dass sie mit den Eigenheiten der Zeitberechnung umgehen kann. Mein derzeitiger Favorit ist moment.js .
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.13.0/moment.js"></script>
<script>
var now = moment(); // get "now"
console.log(now.toDate()); // show original date
var thirty = moment(now).add(30,"minutes"); // clone "now" object and add 30 minutes, taking into account weirdness like crossing DST boundries or leap-days, -minutes, -seconds.
console.log(thirty.toDate()); // show new date
</script>
Für Faulpelze wie mich:
Kips Antwort (von oben) in coffeescript, unter Verwendung einer "enum" und mit demselben Objekt:
Date.UNIT =
YEAR: 0
QUARTER: 1
MONTH: 2
WEEK: 3
DAY: 4
HOUR: 5
MINUTE: 6
SECOND: 7
Date::add = (unit, quantity) ->
switch unit
when Date.UNIT.YEAR then @setFullYear(@getFullYear() + quantity)
when Date.UNIT.QUARTER then @setMonth(@getMonth() + (3 * quantity))
when Date.UNIT.MONTH then @setMonth(@getMonth() + quantity)
when Date.UNIT.WEEK then @setDate(@getDate() + (7 * quantity))
when Date.UNIT.DAY then @setDate(@getDate() + quantity)
when Date.UNIT.HOUR then @setTime(@getTime() + (3600000 * quantity))
when Date.UNIT.MINUTE then @setTime(@getTime() + (60000 * quantity))
when Date.UNIT.SECOND then @setTime(@getTime() + (1000 * quantity))
else throw new Error "Unrecognized unit provided"
@ # for chaining
Nur eine weitere Option, die ich geschrieben habe:
Es ist übertrieben, wenn dies alles ist, was Sie für die Datumsverarbeitung brauchen, aber es wird tun, was Sie wollen.
Unterstützt Datums-/Zeitformatierung, Datumsmathematik (Addieren/Subtrahieren von Datumsteilen), Datumsvergleich, Datumsanalyse usw. Es ist frei verfügbar.