Arbeit mit Daten und Zeiten in JavaScript: Fortgeschrittene Methoden und Bibliotheken

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung: Warum reicht der Standard Date() nicht aus?



Das eingebaute Date-Objekt in JavaScript ist ein leistungsstarkes, aber nicht immer praktisches Werkzeug. Bei der Entwicklung komplexer Anwendungen auf Node.js (z. B. Aufgabenplaner, Analysesysteme oder Finanzdienstleistungen) stoßen Entwickler auf eine Reihe von Problemen:



  • Veränderbarkeit: Methoden wie setMonth() ändern das ursprüngliche Objekt.
  • Begrenzte Zeitzonenunterstützung: Date arbeitet nur mit lokaler Zeit und UTC.
  • Komplexität der Formatierung: Es gibt kein eingebautes Analogon zu strftime.
  • String-Parsing: new Date("2023-13-01") wirft keinen Fehler, sondern erstellt "2024-01-01".


In diesem Artikel betrachten wir fortgeschrittene Ansätze für die Arbeit mit Datum und Uhrzeit in Node.js, die helfen, diese Probleme zu vermeiden und zuverlässigeren Code zu schreiben.



1. Intl.DateTimeFormat: Formatierung ohne externe Abhängigkeiten



Modernes JavaScript (ES6+) bietet eine eingebaute Internationalisierungs-API Intl.DateTimeFormat. Dies ist ein leistungsstarkes Werkzeug, das es ermöglicht, Datum und Uhrzeit für jedes Gebietsschema zu formatieren, ohne Drittanbieter-Bibliotheken einzubinden.



Grundlegende Verwendung



const date = new Date('2024-03-15T14:30:00Z');

// Formatierung für das russische Gebietsschemaconst formatterRU = new Intl.DateTimeFormat('ru-RU', { year: 'numeric', month: 'long', day: 'numeric', weekday: 'long', hour: '2-digit', minute: '2-digit'});

console.log(formatterRU.format(date));// "пятница, 15 марта 2024 г., 17:30"


Erweiterte Optionen: Zeitzonen und relative Zeit



// Formatierung unter Berücksichtigung der Zeitzoneconst formatterTZ = new Intl.DateTimeFormat('en-US', {    timeZone: 'America/New_York',    dateStyle: 'full',    timeStyle: 'short'});console.log(formatterTZ.format(date));// "Friday, March 15, 2024 at 10:30 AM"

// Relative Formatierung (Intl.RelativeTimeFormat)const rtf = new Intl.RelativeTimeFormat('ru', { numeric: 'auto' });console.log(rtf.format(-5, 'day')); // "5 дней назад"console.log(rtf.format(2, 'month')); // "через 2 месяца"


Dieser Ansatz ist ideal, wenn Sie unnötige Abhängigkeiten vermeiden, aber eine flexible Formatierung für die Benutzeroberfläche benötigen.



2. Die date-fns Bibliothek: Modularität und Funktionalität



date-fns ist eine moderne Bibliothek, die auf den Prinzipien der funktionalen Programmierung aufbaut. Ihr Hauptvorteil ist die Modularität: Sie importieren nur die Funktionen, die Sie benötigen, was die Bündelgröße erheblich reduziert.



Installation und grundlegende Beispiele



// Installation: npm install date-fnsimport { format, addDays, subMonths, differenceInDays, isWeekend } from 'date-fns';import { ru } from 'date-fns/locale';

const today = new Date();

// Formatierung mit Gebietsschemaconsole.log(format(today, 'dd MMMM yyyy, EEEE', { locale: ru }));// "15 марта 2024, пятница"

// Datumsarithmetikconst nextWeek = addDays(today, 7);const lastMonth = subMonths(today, 1);

// Differenz zwischen Datenconst diff = differenceInDays(nextWeek, today);console.log(diff); // 7

// Wochenende-Prüfungconsole.log(isWeekend(today)); // true oder false


Komplexe Szenarien: Vergleich und Validierung



import { parse, isValid, isBefore, isAfter, startOfMonth, endOfMonth } from 'date-fns';

// Sicheres Parsingconst parsed = parse('2024-13-01', 'yyyy-MM-dd', new Date());console.log(isValid(parsed)); // false — ungültiges Datum

// Arbeiten mit Bereichenconst start = startOfMonth(new Date(2024, 2, 1)); // 1. Märzconst end = endOfMonth(new Date(2024, 2, 1)); // 31. März

const targetDate = new Date(2024, 2, 15);if (isAfter(targetDate, start) && isBefore(targetDate, end)) { console.log('Das Datum liegt im März 2024');}


date-fns

Blogs

Buchempfehlungen