2017-02-23 4 views
1

Ich habe ein Datum (in UTC Millisekunden), das ich auf einer Seite anzeigen (AngularJS 1.4.0), und die Benutzer möchten es in Eastern Time sehen, unabhängig von der Zeitzone auf ihrem Computer eingestellt.Datumsfilter, der sich auf Sommerzeit einstellt

Ich bin mit den Datum Filter und von den documentation Ich sehe

$filter('date')(date, format, timezone)

Zeitzone für die Formatierung verwendet werden. Es versteht UTC/GMT und die kontinentalen US-Zeitzonenabkürzungen, aber für den allgemeinen Gebrauch verwenden Sie einen Zeitzonen-Offset, z. B. '+0430' (4 Stunden, 30 Minuten östlich des Greenwich-Meridians) Wenn nicht angegeben, wird die Zeitzone des Browsers verwendet werden.

Mit Zeitstempel von heute, wenn ich etwas verwenden wie

{{ record.Timestamp | date:'HH:mm:ss.sss':'EST' }}

schreibt er die Zeit, als ich erwarten würde, aber ich denke, ich werde von einer Stunde aus sein, wenn DST herum rollt . Ich kann auch 'EDT' angeben und es wird die Zeit um eine Stunde höher schlagen, aber gibt es eine Zeitzonenabkürzung, die ich verwenden könnte, die nur "Eastern" bedeutet und das Datum selbst verwendet, um zu bestimmen, ob EST oder EDT verwendet wird? Oder muss ich das Datum überprüfen und selbst einen Offset erstellen: entweder -0500/EST oder -0400/EDT, abhängig vom Datum? (und es sieht so aus, als ob timezone nur eine Zeichenkette sein kann, keine Funktion, das wird meine automatische Erkennung erschweren).

Es scheint nur unwahrscheinlich, dass jemand das Display auf EST oder EDT fest codieren möchte - es ist viel wahrscheinlicher, dass sie die Zeitzone wollen, angepasst an DST.

+0

Das Problem ist, dass Sommerzeit nicht allgemein beobachtet wird. Andernfalls können Sie 'getTimezoneOffset()' von einem Datum im Januar und erneut im Juli überprüfen und den Offset des aktuellen Datums vergleichen und dann 'EDT' oder 'EST' verwenden. Aber wenn der Code in Arizona oder Hawaii laufen würde, würde das nicht funktionieren. –

+0

Das klingt eher nach einem Problem mit meiner möglichen Problemumgehung als das ursprüngliche Problem, richtig? Ich würde wahrscheinlich so etwas versuchen, um DST zu bestimmen, und im Moment hätten wir keine Benutzer in diesen Bereichen, aber _new say nie _ – Danny

+0

Hängt davon ab, was Sie von Ihrem "ursprünglichen Problem" halten :). Das eigentliche Problem ist für mich die Verwendung von US-Zeitzonenabkürzungen durch den Datumsfilter anstelle der etwas mehr standardisierten [IANA-Liste] (https://www.iana.org/time-zones/repository/tz-link.html), die nicht DST angeben. Ich stimme Yasers Antwort bezüglich MomentJS zu. –

Antwort

1

Ich würde Moment.js und Moment Timezone für diese Art von Sachen verwenden, um die richtige Datetime zu bekommen. Filter in AngularJS ist nur das Datetime-Objekt zu formatieren und es in UI anzuzeigen.

Sie können auch einige gebrauchsfertige Anweisungen wie Angular-Moment verwenden. Es hat alle Arten von Filtern zur Verfügung.

+0

Nun, ich * bin * nur versucht, die Datetime für die Anzeige in der Benutzeroberfläche zu formatieren - das ist rein präsentativ. Ich schaue mir 'momentjs' an, aber ich zögere, noch ein paar Bibliotheken für dieses Stück hinzuzufügen. Der Zusatz "timezone" zum Angular Date Filter war großartig - ich konnte ihn jetzt in UTC anzeigen! - Aber es scheint nur ein wenig für die tatsächlichen Zeitzonen zu fehlen. – Danny

+0

Moments gibt es schon eine Weile und es hat einige tolle Features.Sie haben Recht, eine weitere Lib hinzuzufügen, aber ich würde dies nicht als großes Problem betrachten, ich habe den Moment in ein paar Projekten verwendet und es funktioniert perfekt – Yaser

+0

Ich widerstand, aber mit DST schnell nähert habe ich in Winkel-Moment. js und es scheint gut zu funktionieren. – Danny