无论客户端系统的时区如何,获取客户端本地时间的最佳方法是什么?我正在创建一个应用程序,我需要首先从客户端访问的地方获取确切的时间和日期。即使检测客户端系统的 ip 地址也有缺点,或者有时检测客户端系统的时区可能有风险。那么,有什么办法可以真正可靠且不易出错,因为向客户显示错误的时间和日期是一件非常令人尴尬的事情。
如何获取客户端的确切当地时间?
IT技术
javascript
jquery
datetime
geolocation
timezone
2021-02-09 01:12:29
6个回答
如今,您只需一行代码即可获得用户的正确时区:
const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
来源:https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/resolvedOptions
然后,您可以使用moment-timezone来解析时区,例如:
const currentTime = moment().tz(timezone).format();
尝试
let s= new Date().toLocaleString();
console.log(s);
如果你想知道客户端相对于 GMT/UTC 的时区,你可以去:
var d = new Date();
var tz = d.toString().split("GMT")[1].split(" (")[0]; // timezone, i.e. -0700
如果你想要时区的实际名称,你可以试试这个:
var d = new Date();
var tz = d.toString().split("GMT")[1]; // timezone, i.e. -0700 (Pacific Daylight Time)
更新 1
根据您的第一条评论,您还可以使用d.getTimezoneOffset()
以分钟为单位获取 UTC 的偏移量。不过有几个问题。
- 返回的分钟数的符号 (+/-) 可能与您期望的相反。如果你是8小时背后UTC将返回
480
不能-480
。有关更多文档,请参阅MDN或MSDN。 - 它实际上并没有像我给出的第二个例子那样返回客户端报告它所在的时区。只是当前与 UTC 的分钟偏移量。所以它会根据夏令时而改变。
更新 2
虽然字符串拆分示例有效,但它们可能会令人困惑。这是一个正则表达式版本,应该更容易理解并且可能更快(尽管这两种方法都非常快)。
如果你想知道客户端相对于 GMT/UTC 的时区,你可以去:
var gmtRe = /GMT([\-\+]?\d{4})/; // Look for GMT, + or - (optionally), and 4 characters of digits (\d)
var d = new Date().toString();
var tz = gmtRe.exec(d)[1]; // timezone, i.e. -0700
如果您想要时区的实际名称,请尝试以下操作:
var tzRe = /\(([\w\s]+)\)/; // Look for "(", any words (\w) or spaces (\s), and ")"
var d = new Date().toString();
var tz = tzRe.exec(d)[1]; // timezone, i.e. "Pacific Daylight Time"
为了在纯 Javascript 中获取本地时间,请使用此内置函数
// return new Date().toLocaleTimeString();
见下面的例子
function getLocaltime(){
return new Date().toLocaleTimeString();
}
console.log(getLocaltime());