然而,尽管检查了客户端和服务器之间的时间差,但似乎存在高达3-4秒的一些差异。
我的angular代码如下;
// 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秒的差异。
如有任何建议或代码修改,我们将非常感谢。
发布于 2016-02-03 22:01:40
把客户端和服务器的时间混在一起根本不是个好主意。客户端时间根本不可靠,因为用户可以随时随心所欲地更改他的时间。如果他觉得有趣,他可以现在就把他的时间定为06.06.2066。那么你的程序会做什么呢?可能没什么好东西。不要混淆这两种情况,最好的方法可能是仅使用服务器时间-除非您只需要两个时间点的差异来评估持续时间。在这种情况下,您可以使用client-time,因为对于时间戳的差异,绝对值并不重要(2016或2066,谁会关心...3秒就是3秒)
此外,在您的代码中还有另一个问题。如果您想通过将从服务器返回的值加上自ajax调用以来经过的时间来“计算当前服务器时间”,那么您就错过了请求到达服务器所需的延迟。
假设您以0ms发送请求-服务器将在20ms收到请求,并将其当前的服务器时间放在响应中。然后你的客户将会得到结果,比方说,50ms。那么,与实际服务器时间相比,计算出的服务器时间将相差20毫秒。
最后,公平地说,您尝试做的似乎是一种非常不符合最佳实践的方法。
也许如果你告诉我们你想通过这种方法实现什么,我们可以帮助你找到一个更好的解决方案。
发布于 2016-08-11 17:42:39
你可以配置你的服务器在一个"Date“头中返回它的时间--这是一个标准的http头--这样你就不需要专门的rest了:https://en.wikipedia.org/wiki/List_of_HTTP_header_fields
即使这样,您也只能得到请求离开服务器时的时间戳。
如果你有和我一样的问题,并且你需要显示自服务器启动以来所经过的时间-网络延迟在这里不是太大的问题。对于任何其他用途,您将需要让UTC来做这项工作。
希望能有所帮助。
https://stackoverflow.com/questions/35178722
复制相似问题