2 Punkte von GN⁺ 2025-01-31 | 1 Kommentare | Auf WhatsApp teilen
  • Der Release von JavaScript Temporal beginnt

    • Die Implementierung des neuen JavaScript-Objekts Temporal wird nun nach und nach in experimentelle Browser-Releases aufgenommen. Das ist eine große Neuigkeit für Webentwickler, denn der Umgang mit Datum und Uhrzeit in JavaScript wird dadurch deutlich vereinfacht und modernisiert.
    • Anwendungen, die auf Terminverwaltung, Internationalisierung und zeitkritischen Daten basieren, können mit eingebauten Funktionen effizient, präzise und konsistent mit Datum, Uhrzeit, Zeiträumen und Kalendern arbeiten.
    • Bis zu einer stabilen browserübergreifenden Unterstützung ist es noch ein weiter Weg, und mit der Weiterentwicklung der Implementierungen kann es noch Änderungen geben. Dennoch kann man sich Temporal schon jetzt ansehen und verstehen, warum es wichtig ist und welche Probleme es löst.
    • Diese Woche wurden auf MDN mehr als 270 Seiten Temporal-Dokumentation hinzugefügt, einschließlich ausführlicher Erklärungen und Beispiele.
  • Was ist JavaScript Temporal?

    • Um Temporal zu verstehen, lohnt sich ein Blick auf das Date-Objekt in JavaScript. Als JavaScript 1995 entstand, wurde das Date-Objekt von der frühen fehlerhaften Implementierung java.util.Date aus Java übernommen.
    • Java hat diese Implementierung 1997 ersetzt, JavaScript steckt jedoch seit fast 30 Jahren mit derselben API fest.
    • Die größten Probleme des Date-Objekts in JavaScript sind, dass es nur die lokale Zeit des Nutzers und UTC unterstützt und keine Unterstützung für Zeitzonen bietet. Außerdem ist das Parsing-Verhalten oft unzuverlässig, und Date selbst ist veränderbar, was zu schwer nachverfolgbaren Bugs führen kann.
    • All diese Probleme machen die Arbeit mit Datum und Uhrzeit in JavaScript kompliziert und fehleranfällig. Die meisten Entwickler verlassen sich daher auf Bibliotheken wie Moment.js und date-fns, um Datum und Uhrzeit in ihren Anwendungen besser zu verarbeiten.
    • Temporal wurde als vollständiger Ersatz für das Date-Objekt entworfen und macht das Verwalten von Datum und Uhrzeit zuverlässig und vorhersehbar. Temporal unterstützt Zeitzonen- und Kalenderdarstellungen und ergänzt viele eingebaute Methoden für Konvertierung, Vergleich, Berechnung, Formatierung und mehr.
  • Kernkonzepte

    • Die Kernkonzepte in Temporal sind ein Instant (ein eindeutiger Punkt in der Geschichte), Wanduhrzeit (lokale Zeit) und Dauer. Die API ist so aufgebaut, dass diese Konzepte mit den folgenden Strukturen verarbeitet werden:
      • Dauer: Temporal.Duration, die Differenz zwischen zwei Zeitpunkten
      • Zeitpunkte:
        • Eindeutige Zeitpunkte:
          • Als Zeitstempel: Temporal.Instant
          • Datum-Zeit mit Zeitzone: Temporal.ZonedDateTime
        • Datum/Uhrzeit ohne Zeitzonenbezug ("Plain"):
          • Vollständiges Datum und Uhrzeit: Temporal.PlainDateTime
          • Nur Datum: Temporal.PlainDate
          • Jahr und Monat: Temporal.PlainYearMonth
          • Monat und Tag: Temporal.PlainMonthDay
          • Nur Uhrzeit: Temporal.PlainTime
      • Aktuelle Zeit: Temporal.now, um die aktuelle Zeit als Instanzen verschiedener Klassen oder in bestimmten Formaten zu erhalten
  • Beispiele für Temporal

    • Zu den grundlegendsten Einsatzmöglichkeiten von Temporal gehört es, das aktuelle Datum und die aktuelle Uhrzeit als ISO-String zu erhalten. Viele Methoden erlauben nun die Angabe einer Zeitzone, sodass komplexe Berechnungen nicht mehr selbst durchgeführt werden müssen.
    • Auch die Arbeit mit verschiedenen Kalendern wird vereinfacht, sodass sich Datumswerte in anderen Kalendersystemen als dem gregorianischen Kalender erzeugen lassen, etwa im hebräischen, chinesischen oder islamischen Kalender.
    • Die Arbeit mit Unix-Zeitstempeln ist ein sehr häufiger Anwendungsfall, da viele Systeme (APIs, Datenbanken) dieses Format zur Darstellung von Zeit verwenden.
    • Die Methode compare() ermöglicht es, Zeiträume elegant und effizient zu sortieren.
  • Temporal ausprobieren und Browser-Support

    • Die Unterstützung wird langsam in experimentelle Browser-Releases aufgenommen, wobei Firefox derzeit die ausgereifteste Implementierung besitzt.
    • In Firefox ist Temporal in Nightly-Versionen integriert und steht hinter der Einstellung javascript.options.experimental.temporal.
    • Mit der Einführung experimenteller Implementierungen ist jetzt ein guter Zeitpunkt, Temporal auszuprobieren und sich mit einem modernen Ansatz für den Umgang mit Datum und Uhrzeit in JavaScript vertraut zu machen.
  • Danksagung

    • Dank an Eric Meyer für seine Arbeit an diesem Thema. Es ist etwa vier Jahre her, seit Eric in einem Fork von mdn/content die Browser-Kompatibilitätsdaten dokumentiert und die Dokumentation organisiert hat.
    • Joshua Chen hat den Staffelstab von Eric übernommen und Pull Requests für die MDN-Dokumentation vorbereitet.
    • Dank an André Bargull für seine Arbeit an der Firefox-Implementierung von Temporal.

1 Kommentare

 
GN⁺ 2025-01-31
Hacker-News-Kommentare
  • Temporal ist nützlich, um die Probleme der bestehenden Date()-API zu lösen. Es bietet eine praktische API, inspiriert von hochwertigen Zeitbibliotheken wie Rusts chrono und Javas Joda Time

    • Zeit ist komplex, und Temporal verarbeitet sie, indem es zwischen naiver Zeit, Instant und zonierter Zeit unterscheidet
    • Wenn man zu einem Zeitstempel einen Tag hinzufügt, muss entschieden werden, ob dies in einer bestimmten Zeitzone lokal geschieht. Andernfalls können bei DST oder Zeitzonenänderungen Bugs auftreten
    • Es löst auch Serialisierungsprobleme zwischen Zeitstempeln mit „festem Offset“ und Zeitstempeln in einer bestimmten Zeitzone
  • Mit Temporal.ZonedDateTime.prototype.withTimeZone() kann man Zeitzonen umwandeln

    • Zeitzonenumwandlung und die Verarbeitung von Dauern sind wichtige Funktionen, die eine Bibliothek übernehmen sollte, und Temporal erledigt das
    • Allerdings bietet Temporal.Duration keine benutzerdefinierte format-Funktion
  • Der Temporal-Vorschlag ist gut, aber es ist schade, dass beim Vergleich Referenzgleichheit verwendet wird

    • Dadurch entfällt die Möglichkeit, Objekte als Map-Schlüssel zu verwenden oder in einem Set zu sammeln
  • Bei TC39 sind viele Funktionen in Entwicklung, und man hofft, dass Temporal schnell veröffentlicht wird

    • Damit große Browser neue Funktionen unterstützen, ist Entwicklungsaufwand nötig
  • Es gibt Fragen dazu, wie Temporal seine Zeitzonendaten aktualisiert

    • Wenn Nutzer ihren Browser nicht aktualisieren, könnten sie falsche Uhrzeiten sehen
  • Es wird vorgeschlagen, ein Event für Zeitzonenänderungen hinzuzufügen

    • Viele Menschen wechseln täglich die Zeitzone
  • Der Name Temporal wurde gewählt, um Konflikte mit allgemeinen Zeitobjekten zu vermeiden, könnte anfangs aber als Steuerung der Garbage Collection missverstanden werden

  • Die Carbon-Klasse von PHP erbt von DateTime und veranschaulicht die Probleme bei der Arbeit mit veränderbaren Zeitstempeln

    • Es ist besser, CarbonImmutable zu verwenden, das immer neue Instanzen zurückgibt
    • Es wird vorgeschlagen, in Laravel CarbonImmutable und Carbon als Alias zu importieren
  • Es gibt verschiedene Artikel und Diskussionen zu JavaScript Temporal