2016-02-25 64 views
-1

我知道JavaScript Date对象包含getTimezoneOffset()获取偏移量,但有没有任何方法可以返回该时区的标签或name在JavaScript中获取时区标签

例如,我的电脑上,在Chrome的控制台,如果我这样做:

> new Date().toString(); 

然后我得到:

< "Thu Feb 25 2016 08:49:56 GMT-0800 (Pacific Standard Time)" 

我希望做的是采取Date并获得回到"Pacific Standard Time"部分吧。

这是可能的,如果是这样,如何?

回答

0

你可以使用正则表达式来得到它:

var d = new Date().toString(); 
var timezone = d.match(/\(([^)]+)\)/)[1]; 
+0

这假定* Date.prototype.toString *以特定格式返回值。但是,它完全依赖于实现,字符串可能根本不包含任何时区,如果是,则格式不匹配正则表达式。所以不能肯定它会起作用。 – RobG

+0

感谢您指出这一点,我认为输出是标准化的。在所有现代浏览器(Chrome,FF,Safari,Opera和IE 11)和node.js中,输出看起来都是一致的。 – nils

1

我不认为有没有正则表达式匹配的可靠方法(见@nils答案)。不知道那个日期字符串有什么警告,所以可能是脆弱的?它看起来像有一些可用的库,可以简化这个

https://bitbucket.org/pellepim/jstimezonedetect/wiki/Home

var timezone = jstz.determine(); 
timezone.name(); 
"Europe/Berlin" 
+1

这是唯一合理可靠的方法。这些库测试当前时区偏移量,并且有时会在常见夏令时边界的任一侧进行测试。这两者可以准确检测[* IANA时区*](https://www.iana.org/time-zones)。然而,历史日期的准确性是可疑的,因为JavaScript只考虑当前设置,就好像它们总是存在一样。 – RobG

0

有没有直接的方法。您可以通过以下方法获取它。

或者,您可以选择REGEX

function getTimeZoneLabel(){ 
    var str = new Date().toString(); 
    return str.substring(str.indexOf("(")+1,str.indexOf(")")); 
} 
0

一种方法是只是得到什么是paranteses。 Juan Mendes posted a solution

function getTimeZone() { 
    return /\((.*)\)/.exec(new Date().toString())[1]; 
} 

getTimeZone(); 

注意,这是语言,操作系统和浏览器特定的(而且为此当然不是理想的解决方案)。 如果您可以使用图书馆,您可以使用jsTimezoneDetect