如何使用 JavaScript 获取服务器日期?

abh*_*nyu 3 javascript angularjs

我正在使用 AngularJS 客户端应用程序并处理日期和时间。我的问题是任何人都可以更改本地系统日期,为了保护这一点,我想使用服务器日期而无需任何获取或发布请求。有没有办法使用 JavaScript 获取服务器日期?

Zan*_*non 5

如果您在客户端运行 JavaScript ,则查找服务器时间的唯一方法是询问服务器当前时间是多少。这里没有魔法。您需要向服务器发出请求。

选项:

  1. 使用AJAXFetch
  2. 如果 HTML 页面在服务器中渲染,您可以在页面渲染期间写入当前时间并将其发送到客户端。

请注意,由于网络延迟,不可能获得服务器的精确时间,但您可以使用此答案中的代码(已修改)获得非常接近的时间:

var offset = 0;
function calcOffset() {
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open("GET", "https://stackoverflow.com/", false);
    xmlhttp.send();

    var dateStr = xmlhttp.getResponseHeader('Date');
    var serverTimeMillisGMT = Date.parse(new Date(Date.parse(dateStr)).toUTCString());
    var localMillisUTC = Date.parse(new Date().toUTCString());

    offset = serverTimeMillisGMT -  localMillisUTC;
}

function getServerTime() {
    var date = new Date();

    date.setTime(date.getTime() + offset);

    return date;
}
Run Code Online (Sandbox Code Playgroud)