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

问题描述 投票:3回答:2

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

var timezone = jstz.determine();
timezone.name();

或者还有其他可以使用的脚本吗?

javascript jquery datetime timezone jstimezonedetect
2个回答
6
投票

首先了解:

  • 时区缩写可能含糊不清(5个不同的CST。)>
  • 并非所有时区都有有意义的缩写。有些只是为了完成API而设计的,但该地区的人们(白俄罗斯的MSK)并未真正使用它们。
  • [关于正确使用的缩写(HST与HAST),通常存在分歧。
  • 它们通常是英语,尽管其他语言在相同时区可能会有不同的缩写。 (PST与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);

虽然不一定在任何地方都可以。

由于您正在使用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
投票

在本机JS中,您可以:

© www.soinside.com 2019 - 2024. All rights reserved.