Framework der Woche: moment.js [JS]

Profilbild von Florian Schmidt
Vom 27. August 2014

Mit dem dieswöchigen Framework kannst du allerlei Spielereien mit der Zeit anstellen. Okay, das funktioniert nur im Web und nicht im echten Leben, aber immerhin...

Dieser Artikel wurde zuletzt vor über einem Jahr aktualisiert. Die Inhalte könnten inzwischen nicht mehr aktuell sein.

Initialisierung

Was du brauchst? Du musst nur die Datei von moment.js (idealerweise mit der Lokalisierungsdatei) in deiner Seite einbinden, jQuery oder ähnliches werden nicht benötigt. Und schon kann es los gehen, indem du ein moment()-Objekt definierst und (optional) auf die deutsche Lokalisierung stellst.

var now = moment(); 
now.locale('de');

Zeit setzen

In dem obigen Beispiel wird die aktuelle Systemzeit als Zeitdefinition genutzt. Du kannst aber auch andere Daten als Input benutzen:

var now = moment("Aug 07, 2014"); // ISO-Format oder natives JS-Date-Format 
var now = moment("25.12.2014 11:05", "DD.MM.YYYY HH:mm"); // Datum mit anschließendem Formatstring 
var now = moment.unix(1318781876); // UNIX-Timestamp

Bei mittlerem lassen sich statt des einzelnen Formatstrings auch ein Array von Formatstrings angeben, die nacheinander durchprobiert werden. Das ist zum Beispiel sinnvoll, wenn Formulareingaben eines Nutzers ausgewertet werden sollen.

Zeit ausgeben

Die Zeit auszugeben ist ähnlich einfach wie das setzen:

now.date(); // Tag 
now.month(); // Monat (Achtung, 0 entspricht Januar!) 
now.year(); // Jahr 
now.hour(); // Stunde 
now.minute(); // Minute 

Zusammengesetzte Formate sind auch kein Problem:

now.format("dddd, Do MMMM YYYY, h:mm"); // Bsp: Donnerstag, 25. Dezember 2014, 11:05 
now.format("LL"); // Bsp: 25. Dezember 2014

Letzteres Beispiel sind anhand der Lokalisierung vorgegebene Formate. Diese findest du auf der Startseite von moment.js für alle Lokalisierungen ganz unten.

Besonderheit: Zeitdifferenz ausgeben

Was moment.js sehr gut kann: Zeitdifferenzen ausgeben. Für PHP habe ich eine solche Funktion schon einmal erstellt.

now.fromNow(); // Bsp: In 4 Monaten 
now.from(anderesMomentObjekt, true); // Bsp: 5 Tage

Zeit manipulieren

Auch das ist kein Problem, zumindest im Web. Du kannst mittels add(name, value) problemlos Werte hinzufügen, das auch mehrfach hintereinander. Dabei werden beispielsweise auch automatisch Tageswerte über 30/31 in Monate umgerechnet.

now.add('days', 7); 
now.add('h', 7).add('m', 30); // 7 Stunden 30 Minuten hinzufügen

Funktioniert genauso auch mit .substract(name, value), also Werte abziehen.

Zeit vergleichen

Sehr schön: Hiermit kannst du vergleichen, ob ein Moment vor oder nach einem anderen Moment liegt (oder vielleicht auch der selbe ist). Dabei sind nicht nur direkte Vergleich möglich (wäre ja langweilig), auch Vergleiche auf Tages oder auch Jahresebene sind möglich.

moment('2010-10-20').isBefore('2010-10-21'); // true 
moment('2010-10-20').isBefore('2010-12-31', 'year'); // false 
moment('2010-10-20').isBefore('2011-01-01', 'year'); // true

Statt isBefore kannst du genauso auch isSame und isAfter benutzen. Und nun bleibt mir nur noch zu sagen: Viel Spaß mit diesen Momenten ;-)

In dieser neuen Artikelserie stelle ich dir jede Woche ein interessantes Framework inklusive Beispiel für die Webentwicklung vor.

  • # Framework der Woche
  • # JavaScript
  • # Webentwicklung

Du suchst die Kommentare?

Keine Sorge, die sind nicht verloren! Es dauert aber noch eine Weile, bis sie wieder zu sehen sind und du neue Kommentare hinterlassen kannst.

Netzleben ist frisch von einer alten Kirby-Website auf eine neue, Statamic-basierte Website umgezogen. Leider ist das Plugin für Kommentare mit Statamic 3 noch nicht kompatibel.