Einleitung: Warum die Arbeit mit Daten in JavaScript eine Herausforderung für Entwickler ist
Die Arbeit mit Datum und Zeit gehört zu den häufigsten und gleichzeitig tückischsten Aufgaben in der Webentwicklung. Es scheint, was könnte einfacher sein, als das aktuelle Datum zu erhalten oder die Differenz zwischen zwei Ereignissen zu berechnen? In der Praxis stoßen Entwickler auf JavaScript (Node.js) jedoch auf viele Fallstricke: Zeitzonen, ISO-Format, das nicht offensichtliche Verhalten der Methode getMonth() und veraltete Bibliotheken. In diesem Artikel analysieren wir die Arbeit mit Daten von den grundlegenden Prinzipien bis hin zu fortgeschrittenen Techniken, wobei wir nur das Standardobjekt Date und die moderne Bibliothek date-fns verwenden.
1. Grundlagen des Date-Objekts in Node.js
Das eingebaute Objekt Date ist die Grundlage für die Arbeit mit Zeit. Es speichert die Anzahl der Millisekunden, die seit dem 1. Januar 1970 (Unix-Epoche) vergangen sind. Betrachten wir die grundlegenden Operationen.
Erstellen und Abrufen der aktuellen Zeit
Der einfachste Weg, ein Datumsobjekt zu erstellen, ist der Aufruf von new Date() ohne Argumente. Dies gibt das aktuelle Datum und die Uhrzeit auf dem Server zurück.
// Aktuelles Datum und Uhrzeit (in der Zeitzone des Servers)const now = new Date();console.log(now); // Beispiel: 2024-05-20T14:30:00.000Z
// Erstellen aus einem ISO-Stringconst specificDate = new Date('2024-12-25T10:00:00');console.log(specificDate); // 2024-12-25T10:00:00.000Z
// Erstellen aus Komponenten (Jahr, Monat, Tag, Stunden, Minuten, Sekunden)const birthday = new Date(1990, 5, 15); // Achtung: Monat 5 = Juni!console.log(birthday); // 1990-06-15T00:00:00.000ZWichtiger Hinweis: Monate werden in JavaScript ab 0 gezählt (Januar — 0, Dezember — 11). Dies ist eine häufige Fehlerquelle.
Methoden zum Abrufen von Datumskomponenten
Zum Extrahieren einzelner Teile des Datums werden Getter verwendet. Denken Sie daran, dass sie die Werte in der lokalen Zeitzone des Servers zurückgeben.
const date = new Date('2024-03-15T12:30:45');
console.log(date.getFullYear()); // 2024console.log(date.getMonth()); // 2 (März, da Zählung ab 0)console.log(date.getDate()); // 15console.log(date.getDay()); // 5 (Freitag, 0 - Sonntag)console.log(date.getHours()); // 12console.log(date.getMinutes()); // 30console.log(date.getSeconds()); // 45Für die Arbeit in UTC (koordinierte Weltzeit) verwenden Sie Methoden mit dem Präfix getUTC..., z.B. getUTCHours().
2. Formatierung und Ausgabe von Daten
Node.js hat keine eingebaute, bequeme Formatierung von Daten in ein beliebiges Zeichenfolgenformat (z.B. "15. März 2024"). Dafür gibt es zwei Wege: manuelle Zusammenstellung der Zeichenfolge oder die Verwendung von Bibliotheken.
Manuelle Formatierung (ohne externe Bibliotheken)
Wenn Sie ein Datum in einem einfachen Format ausgeben müssen, können Sie eine kleine Funktion schreiben.
function formatDate(date) { const day = String(date.getDate()).padStart(2, '0'); const month = String(date.getMonth() + 1).padStart(2, '0'); const year = date.getFullYear(); return `${day}.${month}.${year}`;}
const today = new Date();console.log(formatDate(today)); // Beispiel: "20.05.2024"Moderne Lösung: Die Bibliothek date-fns
Die Bibliothek date-fns ist eine moderne, modulare und leichtgewichtige Alternative zum veralteten moment.js. Sie ist ideal für Node.js geeignet.
// Installation: npm install date-fns
const { format, addDays, differenceInDays } = require('date-fns');const { de } = require('date-fns/locale'); // Lokalisierung
const date = new Date();
// Formatierung mit Lokalisierungconsole.log(format(date, 'dd. MMMM yyyy', { locale: de }));// Beispiel: "20. Mai 2024"
// Tage hinzufügenconst nextWeek = addDays(date, 7);console.log(format(nextWeek, 'yyyy-MM-dd')); // "2024-05-27"
// Differenz in Tagenconst start = new Date(2024, 0, 1);const end = new Date(2024, 11, 31);co