当前位置:  开发笔记 > 编程语言 > 正文

在JavaScript中获取客户端的时区偏移量

如何解决《在JavaScript中获取客户端的时区偏移量》经验,为你挑选了11个好方法。

我如何收集访客的时区信息?我需要Timezone,以及GMT抵消时间.



1> NickFitz..:

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


2> Pawel Dubiel..:

使用偏移量来计算时区是一种错误的方法,您将始终遇到问题.时区和夏令时规则可能会在一年内多次改变,并且很难跟上变化.

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

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


3> Marquez..:

我意识到这个答案有点偏离主题,但我想我们许多人在寻找答案时也希望格式化显示的时区,也许也会得到区域缩写.所以这里......

如果您希望客户端时区格式良好,您可以依赖JavaScript Date.toString方法并执行:

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

例如,这将为您提供"GMT-0400(EST)",包括适用的时区分钟.

或者,使用正则表达式,您可以提取任何所需的部分:

对于"GMT-0400(EDT)":

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

对于"GMT-0400":

new Date().toString().match(/([A-Z]+[\+-][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


在执行`new Date()之后,实际表示JS时间实际上并不是一个好主意.toString()`完全取决于您的语言环境设置.期待其他客户的产出与您的产品相似是一个非常糟糕的主意.
这也不适用于(惊喜,惊喜)IE.我只是做了拆分Date对象的控制台转储.在Chrome,Firefox和Safari中也是如此,但在IE中却有所不同.所以,你也不能指望不变的索引.2013年12月2日星期一10:22:50 GMT-0500(美国东部时间):Chrome,FF,Safari; 2013年12月2日星期一10:22:50:IE10
在Chrome中添加了时区名称.不要使用split.length而是使用常量而不是`split [4] +""+ split [5]`!
@adimauro ..现在在IE11工作;)

4> cryo..:

已经回答了如何以分钟为单位获得偏移量,但是如果有人希望将本地GMT偏移量作为字符串,例如"+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))



5> 小智..:

您可以使用:

那一刻,时区



// retrieve timezone by name (i.e. "America/Chicago")
moment.tz.guess();

浏览器时区检测相当棘手,因为浏览器提供的信息很少.

那一刻时区使用Date.getTimezoneOffset(),并Date.toString()围绕本年度时刻屈指可数收集关于浏览器环境中尽可能多的信息.然后,它将该信息与加载的所有时区数据进行比较,并返回最接近的匹配.如果是关系,则返回人口最多的城市的时区.

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


这应该是公认的答案.这是唯一一个给出实际时区**名称**而不是偏移量的名称.请记住,时区偏移量可以从名称中导出,反之则不然.由于DST和其他细微之处,多个时区只能在一年中的某些特定日期具有相同的偏移量.

6> Mr_Green..:

我在我的项目中编写了一个函数,它以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());


7> dfa..:

尝试getTimezoneOffset()的的Date对象:

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

此方法以分钟为单位返回时区偏移量,即GMT和本地时间之间的差值(以分钟为单位).



8> زياد..:

JavaScript的:

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


9> Dan Dascales..:

同时提供偏移量和时区的单行代码是简单地在新的Date对象上调用toTimeString()。从MDN:

toTimeString()方法以美国人可读的形式返回Date对象的时间部分。

问题是时区不是标准的IANA格式。它比“洲/城市” IANA格式更加人性化。试试看:

console.log(new Date().toTimeString().slice(9));
console.log(Intl.DateTimeFormat().resolvedOptions().timeZone);
console.log(new Date().getTimezoneOffset() / -60);


10> kolypto..:

使用moment.js:

moment().format('zz');


`z`和`zz`自1.6.0起已被弃用,请参阅http://momentjs.com/docs/#/displaying/format/
@brauliobo这些参数不会返回相同的内容.z和zz返回时区,例如CST,但Z和ZZ返回偏移量,例如-0600.
@MrUpsidown现在是`Z`和`ZZ`

11> Fizer Khan..:

使用momentjs,您可以找到当前时区为

console.log(moment().utcOffset()); // (-240, -120, -60, 0, 60, 120, 240, etc.)
推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有