我如何收集访客的时区信息?我需要Timezone,以及GMT抵消时间.
var offset = new Date().getTimezoneOffset();
console.log(offset);
使用偏移量来计算时区是一种错误的方法,您将始终遇到问题.时区和夏令时规则可能会在一年内多次改变,并且很难跟上变化.
要在JavaScript中获得正确的时区,您应该使用
console.log(Intl.DateTimeFormat().resolvedOptions().timeZone)
我意识到这个答案有点偏离主题,但我想我们许多人在寻找答案时也希望格式化显示的时区,也许也会得到区域缩写.所以这里......
如果您希望客户端时区格式良好,您可以依赖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
已经回答了如何以分钟为单位获得偏移量,但是如果有人希望将本地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))
您可以使用:
那一刻,时区// retrieve timezone by name (i.e. "America/Chicago") moment.tz.guess();
浏览器时区检测相当棘手,因为浏览器提供的信息很少.
那一刻时区使用Date.getTimezoneOffset()
,并Date.toString()
围绕本年度时刻屈指可数收集关于浏览器环境中尽可能多的信息.然后,它将该信息与加载的所有时区数据进行比较,并返回最接近的匹配.如果是关系,则返回人口最多的城市的时区.
console.log(moment.tz.guess()); // America/Chicago
我在我的项目中编写了一个函数,它以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());
尝试getTimezoneOffset()
的的Date
对象:
var curdate = new Date() var offset = curdate.getTimezoneOffset()
此方法以分钟为单位返回时区偏移量,即GMT和本地时间之间的差值(以分钟为单位).
JavaScript的:
var d = new Date();
var n = d.getTimezoneOffset();
var timezone = n / -60;
console.log(timezone);
同时提供偏移量和时区的单行代码是简单地在新的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);
使用moment.js:
moment().format('zz');
使用momentjs,您可以找到当前时区为
console.log(moment().utcOffset()); // (-240, -120, -60, 0, 60, 120, 240, etc.)