我知道如何获得时区偏移,但我需要的是检测“美国/纽约”之类内容的能力。JavaScript能做到吗,还是我只能根据偏移量来估计?
当前回答
您可以使用这个脚本。 http://pellepim.bitbucket.org/jstz/
在这里分叉或克隆存储库。 https://bitbucket.org/pellepim/jstimezonedetect
一旦包含了脚本,就可以在- jstz.olson.timezones variable中获得时区列表。
下面的代码用于确定客户端浏览器的时区。
var tz = jstz.determine();
tz.name();
享受jstz !
其他回答
您可以使用这个脚本。 http://pellepim.bitbucket.org/jstz/
在这里分叉或克隆存储库。 https://bitbucket.org/pellepim/jstimezonedetect
一旦包含了脚本,就可以在- jstz.olson.timezones variable中获得时区列表。
下面的代码用于确定客户端浏览器的时区。
var tz = jstz.determine();
tz.name();
享受jstz !
这得到时区代码(例如,GMT)在旧的javascript(我使用谷歌应用程序脚本与旧引擎):
function getTimezoneName() {
return new Date().toString().get(/\((.+)\)/);
}
我把这个放在这里,以防有人需要。
你可以使用下面的映射表来编写自己的代码: http://www.timeanddate.com/time/zones/
或者,使用moment-timezone库: http://momentjs.com/timezone/docs/
看到zone.name;/ /美国/ Los_Angeles
或者,这个库: https://github.com/Canop/tzdetect.js
获得最多好评的答案可能是获取时区的最佳方法,然而,Intl.DateTimeFormat(). resolvedoptions()。timeZone根据定义返回IANA时区名称,该名称为英文。
如果你想要当前用户语言的时区名称,你可以从Date的字符串表示中解析它,如下所示:
function getTimezoneName() { const today = new Date(); const short = today.toLocaleDateString(undefined); const full = today.toLocaleDateString(undefined, { timeZoneName: 'long' }); // Trying to remove date from the string in a locale-agnostic way const shortIndex = full.indexOf(short); if (shortIndex >= 0) { const trimmed = full.substring(0, shortIndex) + full.substring(shortIndex + short.length); // by this time `trimmed` should be the timezone's name with some punctuation - // trim it from both sides return trimmed.replace(/^[\s,.\-:;]+|[\s,.\-:;]+$/g, ''); } else { // in some magic case when short representation of date is not present in the long one, just return the long one as a fallback, since it should contain the timezone's name return full; } } console.log(getTimezoneName());
在Chrome和Firefox中测试。
当然,在某些环境中,这不会像预期的那样工作。例如,node.js返回一个GMT偏移量(例如GMT+07:00)而不是一个名称。但我认为作为备用方案还是有可读性的。
P.S.不会在IE11中工作,就像Intl…解决方案。
用当前用户的语言表示结果的简短可能性:
console.log(新日期()。toLocaleDateString(未定义,{day:'2-digit',timeZoneName: 'long'}).substring(4));