2017-02-23 53 views
1

我有一個日期(以UTC毫秒爲單位),我在頁面上顯示(AngularJS 1.4.0),並且用戶希望在東部時間看到它,而不管時區在他們的電腦上設置。調整爲夏令時的日期過濾器

我使用日期過濾器,並從documentation我看到

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

時區將用於格式化。它瞭解UTC/GMT和美國大陸時區的縮寫,但對於一般用途,請使用時區偏移量,例如'+0430'(格林尼治子午線以東4小時30分鐘)如果未指定,瀏覽器的時區將使用。

使用時間戳從今天起,如果我使用類似

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

,因爲我希望它寫入時間,但我想我會用一個小時處於關閉狀態時,DST來臨時。我也可以指定'EDT',它會提前一個小時的時間,但是有沒有可以使用的時區縮寫,意思是「Eastern」,並且使用日期本身來確定是使用EST還是EDT?或者我需要檢查日期並自己創建一個偏移量:取決於日期是-0500/EST還是-0400/EDT? (它看起來像timezone只能是一個字符串,而不是一個函數,所以這會使我的自動檢測複雜化)。

任何人想要將顯示硬編碼爲EST或EDT似乎都不太可能 - 他們更希望將時區調整爲DST。

+0

問題在於夏時制沒有普遍遵守。否則,您可以從一月的日期和七月再次檢查'getTimezoneOffset()',並比較當前日期的偏移量,然後適當地使用'EDT'或'EST'。但是,如果代碼將運行在亞利桑那州或夏威夷州,那麼這是行不通的。 –

+0

這聽起來更像是一個問題,可能的解決辦法比原來的問題,對不對?我可能會嘗試類似的東西來確定DST,現在我們不會有任何用戶在這些領域,但_永遠不會說_... – Danny

+0

取決於你認爲的「原始問題」:)。對我而言,真正的問題是日期過濾器使用美國時區縮寫,而不是更爲標準的[IANA列表](https://www.iana.org/time-zones/repository/tz-link.html),不指定DST。我贊同Yaser對MomentJS的回答。 –

回答

1

我會使用Moment.jsMoment Timezone這種東西來獲得正確的日期時間。 AngularJS中的過濾器只是格式化日期時間對象並在UI中顯示它。

您也可以使用一些準備使用的指令,如Angular-Moment。 它有各種可用的過濾。

+0

那麼,我*只是試圖格式化日期時間在UI中顯示 - 這純粹是表示。我會研究'momentjs',但我不願意爲這件作品添加另外幾個庫。除了Angular日期過濾器之外,'timezone'還不錯 - 我現在可以用UTC顯示它! - 但實際時區似乎有點欠缺。 – Danny

+0

momentjs已經有一段時間了,它有一些很棒的功能。你是正確的添加另一個庫,但我不認爲這是一個大問題,我已經在幾個項目中使用的時刻,它的工作原理完美 – Yaser

+0

我抵制,但與DST快速接近我已經在角時刻。 JS,它似乎運作良好。 – Danny