使用jsTimezoneDetect脚本显示三个字母的时区代码

时间:2015-05-22 16:34:35

标签: javascript jquery datetime timezone jstimezonedetect

我正在使用jsTimezoneDetect脚本来检测用户当前时区。下面的代码显示结果为lowercase_expanded_terms。有没有办法显示America/Chicago / CDT(取决于今天的日期)?

CST

或者我可以使用其他任何脚本吗?

2 个答案:

答案 0 :(得分:4)

首先明白:

  • 时区缩写可能含糊不清(5种不同的CST')。
  • 并非所有时区都有有意义的缩写。有些只是用来完成API,但实际上并没有被该地区的人们使用(白俄罗斯的MSK)。
  • 关于正确使用的缩写词(HST vs HAST)经常存在分歧。
  • 它们通常使用英语,但其他语言可能在同一时区使用不同的缩写。 (PST vs HNP(法文))
  • 缩写在很大程度上取决于所选的具体日期 - 因为夏令时可能会改变(EST与EDT)。

在许多浏览器中,您可以直接获取缩写(通过ECMA-402):

var d = new Date(); // now, or the specific date in question
var s = d.toLocaleString("en", {timeZoneName: "short"}).split(' ').pop();

但这并不一定适用于所有地方。

由于您正在使用jsTimeZoneDetect,因此您已拥有IANA时区标识符(" America / Chicago")。所以,你可以从moment-timezone得到它,就像这样:

var m = moment(); // now, or the moment in question
var s = m.tz('America/Chicago').format('z');

这可以在任何地方使用,但你有时间和时刻的开销,以及jstz,除非你将这些库用于其他目的,否则这可能是过度的。

您可能还会考虑服务器端解决方案。例如,如果您使用的是PHP,则可以使用this code。或者,如果您使用的是.NET,则可以使用我的TimeZoneNames库。

答案 1 :(得分:-1)

在原生JS中你可以:

  

var d = new Date();
  timezone = d.getTimezoneOffset();

然后用开关转过来。