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?Ich erstelle immer 7 Funktionen, um mit Datum in JS zu arbeiten:
addSeconds
, addMinutes
, addHours
, addDays
, addWeeks
, addMonths
, addYears
.
Ein Beispiel können Sie hier sehen: http://jsfiddle.net/tiagoajacobi/YHA8x/
Wie zu verwenden:
var now = new Date();
console.log(now.addMinutes(30));
console.log(now.addWeeks(3));
Dies sind die Funktionen:
Date.prototype.addSeconds = function(seconds) {
this.setSeconds(this.getSeconds() + seconds);
return this;
};
Date.prototype.addMinutes = function(minutes) {
this.setMinutes(this.getMinutes() + minutes);
return this;
};
Date.prototype.addHours = function(hours) {
this.setHours(this.getHours() + hours);
return this;
};
Date.prototype.addDays = function(days) {
this.setDate(this.getDate() + days);
return this;
};
Date.prototype.addWeeks = function(weeks) {
this.addDays(weeks*7);
return this;
};
Date.prototype.addMonths = function (months) {
var dt = this.getDate();
this.setMonth(this.getMonth() + months);
var currDt = this.getDate();
if (dt !== currDt) {
this.addDays(-currDt);
}
return this;
};
Date.prototype.addYears = function(years) {
var dt = this.getDate();
this.setFullYear(this.getFullYear() + years);
var currDt = this.getDate();
if (dt !== currDt) {
this.addDays(-currDt);
}
return this;
};
Moment.js nicht mehr verwenden
Wie in anderen guten Antworten empfohlen, ist es in den meisten Fällen am besten, eine Bibliothek zu benutzen, wenn es um Daten geht. Es ist jedoch wichtig zu wissen, dass Moment.js ab September 2020 als レガシー und sollte bei neuen Projekten nicht mehr verwendet werden.
Ich zitiere die Erklärung von Moment in ihrem offizielle Dokumente :
Wir möchten davon abraten, Moment in Zukunft in neuen Projekten zu verwenden. [...] Wir betrachten Moment jetzt generell als ein Legacy-Projekt im Wartungsmodus. Es ist nicht mort aber es ist in der Tat fertig .
Moderne Bibliotheken
Im Folgenden finden Sie von Moment empfohlene Alternativen.
Luxon
Luxon kann als die Evolution von Moment betrachtet werden. Der Autor ist Isaac Cambron , ein langjähriger Mitarbeiter von Moment. Bitte lesen Warum gibt es Luxon? und die Für Moment-Benutzer Seiten in der Luxon-Dokumentation.
- Örtlichkeiten:
Intl
bereitgestellt -
Zeitzonen:
Intl
bereitgestelltimport {DateTime} from 'luxon'
function addMinutes(date, minutes) { return DateTime.fromJSDate(date).plus({minutes}).toJSDate() }
Tag.js
Day.js ist als minimalistischer Ersatz für Moment.js gedacht und verwendet eine ähnliche API. Es ist kein sofortiger Ersatz, aber wenn Sie mit der API von Moment vertraut sind und schnell loslegen wollen, sollten Sie Day.js in Betracht ziehen.
- Örtlichkeiten: Benutzerdefinierte Datendateien, die individuell importiert werden können
-
Zeitzonen:
Intl
zur Verfügung gestellt, über ein Pluginimport dayjs from 'dayjs'
function addMinutes(date, minutes) { return dayjs(date).add(minutes, 'minutes').toDate() }
datum-fns
Date-fns bietet eine Reihe von Funktionen zur Manipulation von JavaScript Date
Objekte. Weitere Einzelheiten finden Sie unter "Warum date-fns?" auf der date-fns-Homepage.
- Örtlichkeiten: Benutzerdefinierte Datendateien, die individuell importiert werden können
-
Zeitzonen:
Intl
über eine separate Begleitbibliothek bereitgestelltimport {addMinutes} from 'date-fns'
function addMinutesDemo(date, minutes) { return addMinutes(date, minutes) }
js-Joda
js-Joda ist eine JavaScript-Portierung von Javas Drei-Zehn-Backport die die Grundlage für die JSR-310-Implementierung von Java SE 8 ist. java.time
Paket. Wenn Sie vertraut sind mit java.time
, ジョダイム ou Noda Zeit finden Sie js-Joda vergleichbar.
- Örtlichkeiten: Benutzerdefinierte Datendateien über ein Zusatzmodul
-
Zeitzonen: Benutzerdefinierte Datendateien über Add-on-Modul
import {LocalDateTime, nativeJs, convert} from '@js-joda/core'
function addMinutes(date, minutes) { return convert( LocalDateTime.from( nativeJs(date) ).plusMinutes(minutes) ).toDate() }
Der einfachste Weg zur Lösung ist die zu erkennen, dass in Javascript Daten nur Zahlen sind. Es beginnt 0
ou 'Wed Dec 31 1969 18:00:00 GMT-0600 (CST)
. Jede 1
steht für eine Millisekunde. Sie können Millisekunden addieren oder subtrahieren, indem Sie den Wert abrufen und ein neues Datum mit diesem Wert instanziieren. Auf diese Weise lässt es sich ziemlich einfach verwalten.
const minutesToAdjust = 10;
const millisecondsPerMinute = 60000;
const originalDate = new Date('11/20/2017 10:00 AM');
const modifiedDate1 = new Date(originalDate.valueOf() - (minutesToAdjust * millisecondsPerMinute));
const modifiedDate2 = new Date(originalDate.valueOf() + (minutesToAdjust * millisecondsPerMinute));
console.log(originalDate); // Mon Nov 20 2017 10:00:00 GMT-0600 (CST)
console.log(modifiedDate1); // Mon Nov 20 2017 09:50:00 GMT-0600 (CST)
console.log(modifiedDate2); // Mon Nov 20 2017 10:10:00 GMT-0600 (CST)