如何收集访问者的时区信息?

我两者都需要:

时区(例如,欧洲/伦敦) 与UTC或GMT的偏移(例如,UTC+01)


当前回答

编辑3-19-2022 -警告:我不再推荐这种方法,因为它在多个浏览器和地区有问题。

我意识到这个答案有点离题,但我想我们中的许多人在寻找答案时也想格式化显示的时区,也许还想获得时区的缩写。所以它开始了…

如果你想让客户端时区格式化得很好,你可以依赖JavaScript Date。toString方法,执行以下操作:

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

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

或者,使用regex你可以提取任何想要的部分:

“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]

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

编辑10/6/2020 -上述解决方案可能不适用于所有浏览器和地区。如果可能的话,我建议你使用date-fns、luxon或dayjs这样的javascript库来提供时区支持。

其他回答

这对我来说是很好的工作:

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

这个就行了。


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

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

未定义的

将OffSet转换为正数:

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

这就是我的解决方案:


    // For time zone:
    const timeZone = /\((.*)\)/.exec(new Date().toString())[1];
    
    // Offset hours:
    const offsetHours = new Date().getTimezoneOffset() / 60;
    
    console.log(`${timeZone}, ${offsetHours}hrs`);

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

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