在JavaScript中获取客户端的时区

我怎样才能收集访问者的时区信息? 我需要时区,以及GMT抵消时间。

var offset = new Date().getTimezoneOffset(); console.log(offset); 

我意识到这个答案有点偏离主题,但我想我们很多人寻找答案也想格式化显示时区,也许也得到了区域缩写。 所以在这里呢…

如果你想要的客户端时区格式很好,你可以依靠JavaScript Date.toString方法,并做:

 var split = new Date().toString().split(" "); var timeZoneFormatted = split[split.length - 2] + " " + split[split.length - 1]; 

这会给你例如“GMT-0400(EST)”,包括适用的时区分钟。

另外,用正则expression式,你可以提取任何所需的部分:

对于“GMT-0400(EDT)”:

 new Date().toString().match(/([AZ]+[\+-][0-9]+.*)/)[1] 

对于“GMT-0400”:

 new Date().toString().match(/([AZ]+[\+-][0-9]+)/)[1] 

就“EDT”而言:

 new Date().toString().match(/\(([A-Za-z\s].*)\)/)[1] 

对于“-0400”:

 new Date().toString().match(/([-\+][0-9]+)\s/)[1] 

Date.toString参考: https : //developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/toString

使用偏移量来计算时区是一个错误的方法,你总是会遇到问题。 时区和夏令时规则可能会在一年内多次发生变化,并且很难跟上变化。

要在JavaScript中获得正确的时区,您应该使用

 console.log(Intl.DateTimeFormat().resolvedOptions().timeZone) 

已经被回答了如何在几分钟内以整数forms获得偏移量,但是如果有人希望本地GMT偏移量为一个string,例如"+1130"

 function pad(number, length){ var str = "" + number while (str.length < length) { str = '0'+str } return str } var offset = new Date().getTimezoneOffset() offset = ((offset<0? '+':'-')+ // Note the reversed sign! pad(parseInt(Math.abs(offset/60)), 2)+ pad(Math.abs(offset%60), 2)) 

我在我的项目中写了一个函数,它以hh:mm格式返回时区。 我希望这可以帮助某人:

 function getTimeZone() { var offset = new Date().getTimezoneOffset(), o = Math.abs(offset); return (offset < 0 ? "+" : "-") + ("00" + Math.floor(o / 60)).slice(-2) + ":" + ("00" + (o % 60)).slice(-2); } 

 // Outputs: +5:00 
 function getTimeZone() { var offset = new Date().getTimezoneOffset(), o = Math.abs(offset); return (offset < 0 ? "+" : "-") + ("00" + Math.floor(o / 60)).slice(-2) + ":" + ("00" + (o % 60)).slice(-2); } // See output document.write(getTimeZone()); 

您可以使用:

那一刻,时区

 <script src="moment.js"></script> <script src="moment-timezone-with-data.js"></script> // retrieve timezone by name (ie "America/Chicago") moment.tz.guess(); 

由于浏览器提供的信息很less,因此浏览器时区检测相当棘手。

Moment Timezone使用Date.getTimezoneOffset()Date.toString()在当年左右的时间内收集关于浏览器环境的尽可能多的信息。 然后将该信息与加载的所有时区数据进行比较,并返回最接近的匹配。 在关系的情况下,返回人口最多的城市的时区。

 console.log(moment.tz.guess()); // America/Chicago 

尝试Date对象的getTimezoneOffset()

 var curdate = new Date() var offset = curdate.getTimezoneOffset() 

此方法以分钟为单位返回GMT和当地时间之间的时差(以分钟为单位)。

随着moment.js :

 moment().format('zz'); 

JavaScript的:

 var d = new Date(); var n = d.getTimezoneOffset(); var timezone = n / -60; console.log(timezone); 

用momentjs ,你可以find当前的时区

 console.log(moment().utcOffset()); // (-240, -120, -60, 0, 60, 120, 240, etc.) 
 <script src="ajax/libs/moment.js/2.13.0/moment.min.js"></script> 

这个值来自用户的机器,它可以随时更改,所以我认为没关系,我只是想获得一个近似的值,然后在我的服务器上将其转换为GMT。

例如,我来自台湾,对我来说是“+8”。

工作示例

JS

 function timezone() { var offset = new Date().getTimezoneOffset(); var minutes = Math.abs(offset); var hours = Math.floor(minutes / 60); var prefix = offset < 0 ? "+" : "-"; return prefix+hours; } $('#result').html(timezone()); 

HTML

 <div id="result"></div> 

结果

 +8 

如果您只需要“MST”或“EST”时区缩写:

 function getTimeZone(){ var now = new Date().toString(); var timeZone = now.replace(/.*[(](.*)[)].*/,'$1');//extracts the content between parenthesis return timeZone; } 

时区(小时)

 var offset = new Date().getTimezoneOffset(); if(offset<0) console.log( "Your timezone is- GMT+" + (offset/-60)); else console.log( "Your timezone is- GMT-" + offset/60); 

作为new Date().getTimezoneOffset()moment().format('zz')的替代方法,你也可以使用momentjs :

 var offset = moment.parseZone(Date.now()).utcOffset() / 60 console.log(offset); 
 <script src="ajax/libs/moment.js/2.13.0/moment.min.js"></script> 

使用这个将OffSet转换为正数:

 var offset = new Date().getTimezoneOffset(); console.log(offset); this.timeOffSet = offset + (-2*offset); console.log(this.timeOffSet); 

这对我来说是非常好的工作:

 // Translation to offset in Unix Timestamp let timeZoneOffset = ((new Date().getTimezoneOffset())/60)*3600; 

你可以简单地尝试这个。 它会返回你当前的机器时间

var _d = new Date(), t = 0, d = new Date(t*1000 + _d.getTime())

这将完成这项工作。


 var time = new Date(), timestamp = Date(1000 + time.getTime()); console.log(timestamp); 

 Thu May 25 2017 21:35:14 GMT+0300 (IDT) 

未定义

看到这个结果运算符是与时区相反的。所以应用一些math函数,然后validationnum或更less。

在这里输入图像描述

请参阅MDN文档

 var a = new Date().getTimezoneOffset(); var res = -Math.round(a/60)+':'+-(a%60); res = res < 0 ?res : '+'+res; console.log(res) 

我正在寻找只有3个字母的string(如“PDT”),并试图马尔克斯的答案,但不得不稍微调整一下跨浏览器的支持。 幸运的是,这个string是最后的匹配:)

以下是我在CoffeeScript中所做的:

 browserTimezone = -> userDate = new Date() zoneMatches = userDate.toString().match(/([AZ][AZ][AZ])/g) userZone = zoneMatches[zoneMatches.length - 1] 

适用于IE8,IE9,Safari 9,Firefox 44和Chrome 48

你只需要包括moment.js和jstz.js

 <script src="ajax/libs/moment.js/2.17.1/moment.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jstimezonedetect/1.0.6/jstz.min.js"></script> 

在那之后

 <script> $(function(){ var currentTimezone = jstz.determine(); var timezone = currentTimezone.name(); alert(timezone); }); </script>