Mit Zeitangaben zu rechnen, ist nicht ganz einfach. Es gibt viele unterschiedliche Einheiten (Jahr, Monat, Tag, Stunde etc.) und beinahe ebenso viele Zahlensysteme, von denen keines dezimal ist. Die JavaScript-Bibliothek Moment.js liefert eine Reihe nützlicher Funktionen, mit denen sich bequem Zeitspannen ausrechnen und Zeitangaben in unterschiedlichen Formaten ausgeben lassen – und das für verschiedene Sprachen und Länder.
Moment.js
Zeiten schnell und einfach formatieren
Ist die fünf Kilobyte große JavaScript-Datei im HTML-Kopf eingebunden, reicht eine Zeile JavaScript, um die Funktionen von Moment.js anzuwenden. Wer die Bibliothek in einer anderen Sprache als Englisch nutzen will, muss eine entsprechende Sprachdatei mit einbinden:
moment().lang("de");moment().format("Do MMMM. YYYY");
Die erste Zeile des Beispiels stellt die Sprache auf Deutsch um. Die zweite Zeile gibt das aktuelle Datum in der gängigen deutschen Schreibweise (Ordnungszahl, Monat- und Jahreszahl) aus. Es werden die bekannten Abkürzungen für unterschiedliche Ausgaben verwenden („M“ für Monat als Zahl ohne führende Null, „MM“ für Monat mit führender Null, „MMM“ für abgekürzten Monat und „MMMM“ für ausgeschriebenen Monat). Die Angabe „Do“ gibt den Tag als Ordnungszahl aus. Im Deutschen wird der Zahl einfach ein Punkt angefügt. Interessant ist diese Angabe für die englische Ausgabe, da die Bildung von Ordnungszahlen dort anders ist als im Deutschen („1st“, „2nd“, „3rd“ etc.).
Anstelle der aktuellen Zeit kann natürlich auch eine beliebige andere Zeitangabe formatiert werden:
moment("01-31-2013, "DD-MM-YYYY").format("Do MMMM. YYYY"); // 31. Januar 2013
Moment.js kann Datumsangaben auch validieren und gibt false
aus, wenn eine Angabe kein Datum sein kann:
moment("01-32-2013", "MM-DD-YYYY").isValid(); // false
Zeitspannen und Dauern berechnen und ausgeben
Knifflig wird es ja immer dann, wenn man mit Zeit rechnen will, um eine Zeitspanne oder eine Dauer auszugeben. Da werden Zeitangaben erst in Sekunden umgerechnet und anschließend – nach Addition oder Subtraktion von zwei Zeiten – wird das Ganze wieder in ein für den Menschen nachvollziehbares Format gebracht. Moment.js nimmt einem diese wilde Rechnerei ab und stellt dafür entsprechende Funktionen zur Verfügung.
moment().add("days", 7).add("months", 1);
Im Beispiel werden dem aktuellen Datum sieben Tage und ein Monat hinzugefügt. Das Datum lässt sich anschließend mit format()
beliebig formatieren. Das Gegenstück subtract()
zum Subtrahieren von Zeiten ist ebenfalls vorhanden.
Häufig werden Zeitangaben in Relation zum aktuellen Datum gemacht– zum Beispiel um anzugeben, wann etwas stattfindet oder wann etwas stattgefunden hat. Mit der Funktion fromNow()
können solche Angaben berechnet und ausgeben werden:
moment("01-31-2013, "DD-MM-YYYY").fromNow();
Je nachdem, wie lange das angegebene Datum in der Zukunft oder Vergangenheit liegt, gibt Moment.js die Dauer in Jahren, Monaten, Tagen, Stunden oder Minuten an. Statt einfach das Datum auszugeben werden übliche Angaben wie „in drei Tagen“ oder „morgen“ verwendet.
Die Funktion humanizeDuration()
kann zudem feste Zeitspannen in für den Menschen gebräuchliche Angaben ausgeben:
moment.humanizeDuration(-1, "minutes", true); // vor einer Minute
Fazit: Moment.js macht es einem wirklich einfach, mit Zeitangaben zu rechnen. Dass Zeiten nicht nur als schnöde Zahlen ausgegeben werden können, sondern als gängige Wortkombinationen, ist das I-Tüpfelchen auf diesem umfangreichen und nützlichen Werkzeug. Moment.js steht frei unter der MIT-Lizenz zur Verfügung.
(dpe)