JS 如何获取服务器时间

1,194 阅读1分钟

因为客户端电脑时间可能不准确,而且用户可以手动修改电脑的时间,所以很多时候我们需要在程序里获取服务器时间来保证时间的真实性,目前可以用 jQuery 提供的 api 来获取,当项目中没有引入 jQuery 时,就需要我们自己封装一个获取服务器时间的方法。

1.使用 jQuery

new Date($.ajax(async: false).getResponseHeader("Date"))

2.使用原生方法

使用同步方法获取

function getServerDate() {
  let date = null;
  try {
    let xhr = new XMLHttpRequest();
    if (!xhr) {
      xhr = new ActiveXObject('Microsoft.XMLHTTP');
    }
    xhr.open('HEAD', '/', false);
    xhr.send(null);
    const nowDate = xhr.getResponseHeader('Date');
    nowDate && (date = new Date(nowDate));
    return date;
  } catch (error) {
    console.log(error);
    return date;
  }
}

使用异步请求,可监听 onreadystatechange 状态来做不同的操作

function getServerDate() {
  return new Promise((resolve, reject) => {
    try {
      let xhr = new XMLHttpRequest();
      let date = null;
      if (!xhr) {
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
      }
      xhr.open("HEAD", location.href, true);
      xhr.onreadystatechange = function () {
        if (xhr.readyState == 4 && xhr.status == 200) {
          const nowDate = xhr.getResponseHeader("Date");
          nowDate && (date = new Date(nowDate));
          resolve(date);
        }
      };
      xhr.send(null);
    } catch (error) {
      reject(error);
    }
  });
}

XMLHttpRequest 同步请求和异步请求的区别