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

妖精的绣舞 提交于 2020-01-07 21:44:07

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

如何收集访问者的时区信息? 我需要时区以及GMT偏移时间。


#1楼

尝试使用Date对象的getTimezoneOffset()

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

此方法返回以分钟为单位的时区偏移量,这是GMT与本地时间(以分钟为单位)之差。


#2楼

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

时区偏移量是UTC与本地时间之间的差(以分钟为单位)。 请注意,这意味着如果本地时区在UTC之后,则偏移量为正;如果在本地时区之前,则偏移量为负。 例如,如果您的时区是UTC + 10(澳大利亚东部标准时间),则将返回-600。 夏时制即使在给定的语言环境下也可以防止该值保持恒定

请注意,并非所有时区都被整个小时抵消:例如,纽芬兰是UTC减去3h 30m(将夏令时排除在外)。


#3楼

我意识到这个答案有点离题,但是我想我们当中许多人都在寻找答案,但他们也想格式化显示的时区,也许还要获得时区缩写。 所以就这样...

如果您希望客户端时区格式正确,则可以依赖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


#4楼

随着moment.js

moment().format('zz');

#5楼

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

工作小提琴

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!