使用 jsTimezoneDetect 脚本显示三个字母的时区代码
Display three letters time zone code using jsTimezoneDetect script
我正在使用 jsTimezoneDetect 脚本检测用户当前时区。下面的代码将结果显示为 America/Chicago
。有没有办法显示 CDT
/CST
(取决于今天的日期)?
var timezone = jstz.determine();
timezone.name();
或者我可以使用任何其他脚本吗?
在原生 JS 中你可以:
var d = new Date();
timezone = d.getTimezoneOffset();
然后用一个开关过去。
首先了解:
- 时区缩写可能不明确(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);
虽然这不一定适用于所有地方。
由于您使用的是 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. Or, if you're using .NET, you can use my TimeZoneNames 库。
我正在使用 jsTimezoneDetect 脚本检测用户当前时区。下面的代码将结果显示为 America/Chicago
。有没有办法显示 CDT
/CST
(取决于今天的日期)?
var timezone = jstz.determine();
timezone.name();
或者我可以使用任何其他脚本吗?
在原生 JS 中你可以:
var d = new Date();
timezone = d.getTimezoneOffset();
然后用一个开关过去。
首先了解:
- 时区缩写可能不明确(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);
虽然这不一定适用于所有地方。
由于您使用的是 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. Or, if you're using .NET, you can use my TimeZoneNames 库。