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

αƞj*_*jiβ 3 javascript jquery timezone datetime jstimezonedetect

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

var timezone = jstz.determine();
timezone.name();
Run Code Online (Sandbox Code Playgroud)

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

Mat*_*int 7

首先了解:

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

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

const d = new Date(); // now, or the specific date in question
const tz = d.toLocaleString('en', {timeZoneName: 'short'}).split(' ').pop();
console.log(tz);
Run Code Online (Sandbox Code Playgroud)

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

由于您正在使用 jsTimeZoneDetect,因此您已经拥有 IANA 时区标识符(“美国/芝加哥”)。因此,您可以从moment-timezone获取它,如下所示:

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

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

您也可以考虑使用服务器端解决方案。例如,如果您使用的是 PHP,则可以使用此代码。或者,如果您使用 .NET,您可以使用我的TimeZoneNames库。