【问题标题】:How to get server date using JavaScript?如何使用 JavaScript 获取服务器日期?
【发布时间】:2016-11-30 09:15:41
【问题描述】:

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

【问题讨论】:

  • 等等。 JavaScript 是客户端语言。您将需要“询问”服务器端以获取其时间。请注意,连接和加载时间可能会影响获取时间的准确性
  • 你需要额外的 ajax 请求
  • 是的....加载可能会影响时间的准确性....用ajax post req可能吗?
  • 请记住,即使您成功从服务器获取日期,恶意客户端仍然可以更改它。如果准确的日期对系统至关重要,则必须在服务器端进行验证。
  • '为了保护这一点,我想使用服务器日期而不需要任何 get 或 post 请求” 哈哈,什么?

标签: javascript angularjs


【解决方案1】:

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

选项:

  1. 使用AJAXFetch
  2. 如果HTML页面是在服务端渲染的,可以在页面渲染过程中写入当前时间并发送给客户端。

请注意,由于网络延迟,服务器的时间无法精确,但您可以使用this answer 中的代码(已修改)非常接近:

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;
}

【讨论】:

  • @epascarello 这只是一个 AJAX 调用。 jQuery 可能 在 IE 内部实现这一点。
  • 信不信由你,仍有一些组织架构之神不允许使用 jQuery 或任何其他开源。 *叹息*
  • @epascarello,我已更新答案以删除旧的 ActiveX 引用。
  • OP 明确声明“没有任何获取或发布请求”。您期待因做相反的事情而获得赞誉吗?
猜你喜欢
  • 1970-01-01
  • 2015-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多