use*_*234 34 javascript jquery timezone datetime geolocation
无论客户端系统的时区如何,获取客户端本地时间的最佳方法是什么?我正在创建一个应用程序,我首先需要获取客户端访问位置的确切时间和日期.即使检测客户端系统的IP地址也有缺点,或者检测客户端系统的时区有时可能存在风险.那么,有没有什么方法可以真正可靠并且不容易出错,因为向客户显示错误的时间和日期是非常令人尴尬的.
Mad*_*iha 44
在JavaScript?只需实例化一个新的Date对象
var now = new Date();
Run Code Online (Sandbox Code Playgroud)
这将创建一个具有客户端本地时间的新Date对象.
Sta*_*nko 19
现在,您可以获得只有一行代码的用户的正确时区:
const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
Run Code Online (Sandbox Code Playgroud)
来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/resolvedOptions
然后,您可以使用moment-timezone来解析时区,如:
const currentTime = moment().tz(timezone).format();
Run Code Online (Sandbox Code Playgroud)
Kam*_*ski 12
尝试
let s= new Date().toLocaleString();
console.log(s);Run Code Online (Sandbox Code Playgroud)
pse*_*ant 10
如果您想知道客户相对于GMT/UTC的时区,请转到:
var d = new Date();
var tz = d.toString().split("GMT")[1].split(" (")[0]; // timezone, i.e. -0700
Run Code Online (Sandbox Code Playgroud)
如果您想要时区的实际名称,可以试试这个:
var d = new Date();
var tz = d.toString().split("GMT")[1]; // timezone, i.e. -0700 (Pacific Daylight Time)
Run Code Online (Sandbox Code Playgroud)
根据您的第一条评论,您还可以使用d.getTimezoneOffset()从UTC获得以分钟为单位的偏移量.但是夫妇的陷阱与它.
480不能-480.有关更多文档,请参阅MDN或MSDN.虽然字符串拆分示例有效,但它们可能会令人困惑.这是一个应该更容易理解的正则表达式版本,并且可能更快(尽管两种方法都非常快).
如果您想知道客户相对于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
Run Code Online (Sandbox Code Playgroud)
如果您想要时区的实际名称,请尝试以下方法:
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"
Run Code Online (Sandbox Code Playgroud)
小智 10
为了在纯 Javascript 中获取本地时间,请使用这个内置函数
// return new Date().toLocaleTimeString();
请参阅下面的示例
function getLocaltime(){
return new Date().toLocaleTimeString();
}
console.log(getLocaltime());
Run Code Online (Sandbox Code Playgroud)
直接这样:
new Date((new Date().setHours(new Date().getHours() - (new Date().getTimezoneOffset() / 60)))).toISOString()
Run Code Online (Sandbox Code Playgroud)
此实用程序函数中有更多详细信息
function getLocaLTime() {
// new Date().getTimezoneOffset() : getTimezoneOffset in minutes
//for GMT + 1 it is (-60)
//for GMT + 2 it is (-120)
//..
let time_zone_offset_in_hours = new Date().getTimezoneOffset() / 60;
//get current datetime hour
let current_hour = new Date().getHours();
//adjust current date hour
let local_datetime_in_milliseconds = new Date().setHours(current_hour - time_zone_offset_in_hours);
//format date in milliseconds to ISO String
let local_datetime = new Date(local_datetime_in_milliseconds).toISOString();
return local_datetime;
}
Run Code Online (Sandbox Code Playgroud)