2013-08-06 58 views
5

我有一個腳本,用於讀取用戶時區並根據用戶顯示時間。如何顯示時區縮寫?用Date.js顯示時區縮寫

我有一個遊戲網站,並在帖子上寫上「我們將在7:00現場直播」。來自世界各地的用戶閱讀我們的博客,並希望觀看現場直播。我有以下腳本應該讀取用戶時區,並根據用戶的居住地點顯示時間。

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
    <title>Localtime</title> 
    </head> 
    <body> 
    We'll be playing live at <span class="localtime">7:00PM EDT</span> 
    <script src="//cdnjs.cloudflare.com/ajax/libs/datejs/1.0/date.min.js"></script> 
    <script 
     var els = document.getElementsByClassName('localtime'); 
     for (var i = 0, l = els.length; i < l; i++) 
     els[i].innerHTML = 
      Date.parse(els[i].innerHTML).toLocaleString(); 
    </script> 
    </body> 
</html> 

如何顯示的時候旁邊有一個用戶特定的時區縮寫,以便用戶知道時間是基於他們的時區?

回答

3

有幾件事情:

  • date.js has been abandoned。你應該避免使用它。
  • 時區縮寫不明確。見this list
  • 例如,如果輸出爲「CST」 - 可能意味着「中央標準時間」,「中國標準時間」或「古巴標準時間」。
  • 據我所知,沒有任何庫會給你本地時區的縮寫。
  • 通常您可以看到一些區域信息,只是Date().toString(),但它高度依賴於瀏覽器。它可能會以縮寫形式出現,或作爲時區的本地化全名或ID,或根本不存在。
  • 也許你會更好地顯示偏移量。這至少會標準化。你可以用原始JavaScript做到這一點,或通過moment.js更容易。
  • 在您提供的代碼中,沒有輸入日期,所以您將很難將其鎖定到特定的時區。您假定「EDT」是日期解析器在所有瀏覽器中都可以識別的東西,事實並非如此。
  • 最好的方法是從一個確切的時刻開始(無論是UTC還是偏移量),然後將其渲染爲正確的格式。例如,(與moment.js)

    var m = moment("2013-08-06T19:00:00-04:00"); // this is 7PM EDT 
    var s = m.format("HH:mm ([UTC]ZZ)"); // example: "16:00 (UTC-0700)" 
    
2

更新了DateJS核心代碼的版本(和將被固定在未來開放的錯誤)請訪問:

https://github.com/abritinthebay/datejs/

然而這聽起來像你只是在尋找DateJS的格式或toString方法。

例如:

var tmp = Date.parse("2013-09-05T22:40:00Z"); 
var time = tmp.format("g:i A T"); 

這將留出時間以字符串「3:40 PM PDT」

這不依賴於內部瀏覽器問題作爲DateJS基於該偏移查找日期(每個瀏覽器不會更改)。

0

bigeasy的Timezone似乎是一個給你時區縮寫的解決方案,雖然由@ matt-johnson暗示,縮寫are not standardized。的嘗試時區與Node.js的

例(跟着walk-through):

$ npm install timezone 
$ node 
> tz = require('timezone'); 
[Function] 
> us = tz(require("timezone/America")); 
[Function] 
> us(us("2013-12-11 03:00"), "America/Detroit", "%Z") 
'EST' 
> us(us("2013-12-11 03:00"), "America/Los_Angeles", "%Z") 
'PST' 
> us(us("2013-10-11 03:00"), "America/Los_Angeles", "%Z") 
'PDT' 

Moment.js有一個entry point "hook" for time zone abbreviations,但據我所知,是不是利用了這一點庫然而。