客户端和服务器时间之间的差异
Difference between client and server 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')
.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 完成工作。
希望对您有所帮助。
- Javascript-如何使用bootstrap日期时间选择器自动计算两个时间输入之间的差异
- 用时间戳获取两个不同日期之间的时间差
- Mongoose查询在两个日期时间之间提取数据
- angularjs计算开始时间和当前时间之间的时间差
- 在Chrome开发工具中测量步骤之间的时间
- 获取用户和服务器时间之间的时间差
- 如何在javascript中计算两个日期时间之间的差异
- JavaScript:获取MySQL时间戳和当前日期之间的天数差
- 如何在数组中循环,等待每个项目之间的时间
- 用户如何获取两个时间戳之间的对象
- 如何调试$ionicView.beforeEnter和$ionicView.enter之间的时间
- 为什么chromecast在动画帧之间需要这么长时间
- 传递日期和日期时间之间的Javascript Date()差异
- 返回两个日期时间单元格之间的差值
- 如何使用Moment.JS检查当前时间是否在2次之间
- 日期和unix时间之间的时间,以及计时器倒计时
- 如何处理php(Laravel-api)和javascript(AngularJS)之间的日期时间
- 在 PhantomJS 中在页面上下文中的控制台日志之间等待一段时间
- 如何在 24 小时制下计算两个时间之间的时差
- 处理javascript和Rails之间时间的正确方法