moment.js, Zeitzonen und Sommerzeit

8

Ich gebe eine Liste von UTC-Daten / -Zeiten von einem .Net-Dienst zurück, der wie folgt formatiert ist:

%Vor%

Auf dem Client konvertiere ich jeden dieser String-Werte in einen entsprechenden UTC-basierten Moment, so wie

%Vor%

Auf der Seite gibt es einen Droop-down mit einer Liste von Zeitzonen, die der Benutzer ändern kann. Diese sind an eine Sammlung von Zeitzonenobjekten wie folgt gebunden:

%Vor%

Ich zeige dann jeden Moment an, in dem der ausgewählte Zeitzonen-Offset passiert:

%Vor%

Das Ergebnis berücksichtigt jedoch nicht die Sommerzeit, da die Zeitzonendaten, die von .Net stammen, nicht zwischen dst- und non dst-Offsets unterscheiden.

Gibt es eine Möglichkeit, dies mit moment.js oder den neuen Moment-Zeitzonen-Bits zu erreichen? Ich denke, es könnte möglich sein, wenn ich die Standard-UTC-Offset-Namen (z. B .: "Central Standard Time") der Olson DB-Kennung (zB: "America / Chicago"), aber wenn es einen einfacheren Weg gibt, lass es mich wissen.

    
Joshua Barker 09.07.2013, 23:00
quelle

1 Antwort

5

Sie sollten Noda Time auf der .Net-Seite und moment-timezone auf dem Client und übergibt die ID der IANA / Olson Zeitzone.

Wenn Sie die Windows-Zeitzonen-IDs in Ihrer Dropdown-Liste beibehalten möchten, können Sie Conversions mit den in Noda Time eingebetteten CLDR-Daten durchführen. Ich habe dokumentiert, wie man es in diesem Beitrag macht: Wie übersetzt man zwischen Windows- und IANA-Zeitzonen?

Aber die bessere Lösung wäre, die Windows-Zonen alle zusammen zu vermeiden. Sie können eine Liste von IANA / Olson-IDs mit der Technik füllen, die ich in diesem Beitrag beschreibe: Wie sollte ich eine Liste von IANA / Olson-Zeit ausfüllen? Zonen von Noda Time?

Besser noch, Sie können Ihre Dropdown-Liste durch ein Steuerelement (inline oder modal) ersetzen, das eine Weltkarte anzeigt, sodass Ihre Benutzer ihre Zeitzone problemlos auswählen können. Die beste Kontrolle dafür, die ich gesehen habe, ist diese , aber es gibt auch ein paar andere da draußen.

>

Wenn Sie ausschließlich in IANA / Olson-Zonen arbeiten können, müssen Sie keine Konvertierung durchführen. Sie können das Windows TimeZoneInfo -Objekt aufgeben und stattdessen einfach Noda Time verwenden. Wenn Sie möchten, können Sie nur Ihre Zeitzonenumwandlungsfunktionen ersetzen und den Rest intakt lassen. Oder du könntest komplett gehen und all deine DateTime und DateTimeOffset Verwendungen durch Noda Time Typen ersetzen. Es liegt an dir.

    
Matt Johnson 10.07.2013 16:02
quelle