使用偏移值获取时区缩写

时间:2015-02-06 21:13:49

标签: javascript timezone momentjs

使用moment.js(使用moment-timezone),我想获得当前语言环境的时区缩写(例如PST)。

var now = Date.now(); // 1423254073931
var zone = moment(now).zone(); // 480
var timezone = 

如何获取时区缩写?我在文档和其他地方看到的所有示例都选择了一个特定的区域,如"America/New_York"

从文档中看,我可以使用zone.abbr(timestamp)Zone Object获取信息,但我不确定如何访问区域对象。

JSFiddle

2 个答案:

答案 0 :(得分:29)

标题和问题不同。在标题中,您询问如何使用偏移来获取它 - 这是不可能的。有许多时区共享相同的偏移量,因此无法区分时区缩写和单独的偏移。

但是在这个问题中,您询问了如何获取当前区域设置的缩写,以获取特定的时间戳。

一般问题是,没有完全可靠的方法来检测当前时区。这在this answer中讨论。因此,时刻 - 时区无法确定地告知默认情况下应加载哪个时区。

但是还有其他一些选择。

  • 在某些浏览器中,Date对象的ECMAScript Internationalization API功能支持toLocaleString扩展名。如果支持,您可以这样做(没有时间):

    var d = new Date(); // or whatever date you have
    var tzName = d.toLocaleString('en', {timeZoneName:'short'}).split(' ').pop();
    

    在支持的浏览器中,您将获得类似" EST"的值。您可能希望进行某种测试,因为它不能在所有浏览器中运行。

  • 您可以使用jsTimeZoneDetect之类的脚本来猜测当地时区。它的通常正确,但无法保证。然后,您可以将该值传递给moment-timezone。

    var tzName = jstz.determine().name();
    var m = moment();
    var abbr = m.tz(tzName).zoneAbbr();  // or .format('z')
    
  • 现在还在moment-timezone中内置了对时区检测/猜测的支持:

    var tzName = moment.tz.guess();
    var abbr = m.tz(tzName).zoneAbbr();  // or .format('z')
    

答案 1 :(得分:5)

最新版本的moment.js会给你时区猜测: PR#220 例如:moment.tz.guess(); will result in 'America/New_York'