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

Difference between client and server time

本文关键字:之间 时间 服务器 客户端      更新时间:2023-09-26

我想在 php/javascript 应用程序中使用服务器时间。秒的时间对于应用程序来说非常重要。但是,尽管检查了客户端和服务器时间之间的时差,但似乎存在一些长达 3-4 秒的差异。

我的角度代码如下;

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

从理论上讲,这应该有效,但最多会出现四秒的差异。

任何建议或代码修改将不胜感激。

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

此外,您的代码中还有另一个问题。如果要通过将服务器返回的值加上自 ajax 调用以来经过的时间相加来"计算当前服务器时间",则会丢失请求到达服务器所需的延迟。

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

最后,为了公平起见,您尝试做的事情似乎是一种非常非最佳实践的方法。

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

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

即便如此,您也只有请求离开服务器时的时间戳。

如果您遇到与我相同的问题,并且需要显示自服务器上启动以来经过的时间 - 网络延迟在这里不是什么大问题。对于任何其他用法,您需要让 UTC 完成工作。

希望对您有所帮助。