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

Javascript 客户端和服务器之间的时间差,javascript,php,angularjs,time,Javascript,Php,Angularjs,Time,我想在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

我想在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;
        });
从理论上讲,这应该是可行的,但出现了长达4秒的差异


如有任何建议或代码修改,我们将不胜感激

将客户端和服务器时间完全混合使用不是一个好主意。 客户机时间根本不可靠,因为用户可以随时任意更改时间。如果他觉得有趣的话,他现在就可以在06.06.2066度过他的时光。那么你的程序会做什么?可能没什么好的。 不要混淆这些,最好的方法可能是只使用服务器时间- 除了你只需要两个时间点的差来计算一个持续时间。在这种情况下,您可以使用客户端时间,因为对于时间戳的差异,绝对值并不重要(2016或2066,谁在乎……3秒就是3秒)

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

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

最后,为了公平起见,你试图做的似乎是一种非常非最佳实践的方法


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

您可以将服务器配置为在“日期”标头中返回时间-这是一个标准http标头-这样您就不必为其专门设置rest:

即使如此,您也只有在请求离开服务器时才有时间戳

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


希望能有帮助

如果客户机和/或服务器没有使用时间服务,或者没有使用相同的时间服务,您可能会遇到此类差异,您必须对此进行计划。代码修改在这里没有用处。不可能每个人都使用相同的时间服务(假设他们正在使用)。我可以看出你可能想增加检查次数的频率。但是,您能告诉我如何规划它们吗?您的时差似乎是在比较客户机时间和服务器时间,始终使用服务器时间可能是一个很好的做法?是的,但是应用程序是通过人们的浏览器推送的,并且对时间敏感,因此依赖于在客户端和服务器时间之间进行计算来有效地使用服务器时间。