首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >客户端和服务器之间的时间差

客户端和服务器之间的时间差
EN

Stack Overflow用户
提问于 2016-02-03 21:41:57
回答 2查看 2.9K关注 0票数 4

然而,尽管检查了客户端和服务器之间的时间差,但似乎存在高达3-4秒的一些差异。

我的angular代码如下;

代码语言:javascript
复制
 // Pre ajax time (so we can see how long it took to get data from server)
    var timeElapsed = new Date().getTime();

    $http.get('/getServerTime.php')
        .success(function (data) {
            // Calculate the length of the ajax request in seconds
            timeElapsed = new Date().getTime() - timeElapsed;

            // Add that to the returned server time to get the current
            // server time. (data.date is provided by the getServerTime.php                       page)
            $scope.serverTime = data.date + timeElapsed;
            $scope.timeDifference = new Date().getTime() - $scope.serverTime;
        });

从理论上讲,这应该是可行的,但出现了长达4秒的差异。

如有任何建议或代码修改,我们将非常感谢。

EN

回答 2

Stack Overflow用户

发布于 2016-02-03 22:01:40

把客户端和服务器的时间混在一起根本不是个好主意。客户端时间根本不可靠,因为用户可以随时随心所欲地更改他的时间。如果他觉得有趣,他可以现在就把他的时间定为06.06.2066。那么你的程序会做什么呢?可能没什么好东西。不要混淆这两种情况,最好的方法可能是仅使用服务器时间-除非您只需要两个时间点的差异来评估持续时间。在这种情况下,您可以使用client-time,因为对于时间戳的差异,绝对值并不重要(2016或2066,谁会关心...3秒就是3秒)

此外,在您的代码中还有另一个问题。如果您想通过将从服务器返回的值加上自ajax调用以来经过的时间来“计算当前服务器时间”,那么您就错过了请求到达服务器所需的延迟。

假设您以0ms发送请求-服务器将在20ms收到请求,并将其当前的服务器时间放在响应中。然后你的客户将会得到结果,比方说,50ms。那么,与实际服务器时间相比,计算出的服务器时间将相差20毫秒。

最后,公平地说,您尝试做的似乎是一种非常不符合最佳实践的方法。

也许如果你告诉我们你想通过这种方法实现什么,我们可以帮助你找到一个更好的解决方案。

票数 3
EN

Stack Overflow用户

发布于 2016-08-11 17:42:39

你可以配置你的服务器在一个"Date“头中返回它的时间--这是一个标准的http头--这样你就不需要专门的rest了:https://en.wikipedia.org/wiki/List_of_HTTP_header_fields

即使这样,您也只能得到请求离开服务器时的时间戳。

如果你有和我一样的问题,并且你需要显示自服务器启动以来所经过的时间-网络延迟在这里不是太大的问题。对于任何其他用途,您将需要让UTC来做这项工作。

希望能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35178722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档