我一直在做一个页面,并且我的当前需求之一是它使用服务器的时间运行,而不是由Date对象使用的客户端本地时间运行,我的第一种方法是要求从服务器每秒的时间,但这是真的效率低下,所以我想知道,是否有任何办法,在从服务器请求Date对象一次后,每秒钟更新同一个Date对象以继续它从服务器?使用Javascript的更新日期对象
回答
解决方法是:(这是angularjs的实现) 这个东西是一个Date对象有一个叫做getTime()的函数,它返回自1970年以来通过的毫秒数,所以你可以使用这个数并保持每秒增加1000毫秒这种方式,你不必依靠多个请求,也不在当地时间
$scope.current_TimeStamp = 0;
$scope.clock= function(){
setTimeout($scope.clock, 1000);
$scope.current_TimeStamp+=1000;
var today = new Date($scope.current_TimeStamp)
var days = [ 'Domingo','Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'];
var months = ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'];
var date = days[today.getDay()] +" " + today.getDate()+ " de " + months[today.getMonth()] + " "+ today.toLocaleTimeString() ;
if(document.getElementById('time') !== null)
document.getElementById('time').innerHTML = date;
}
$scope.startTime= function(){
// make the request to get the date from the server
// in my case I store it in $scope.current_TimeStamp
RoomService.RequestTime().then(function(response){
var date = new Date(response.data)
$scope.current_TimeStamp = date.getTime()
var t = setTimeout($scope.clock, 1000);
})
}
$scope.startTime();
你依赖于setTimeout以*精确* 1秒的间隔运行,它不会这样做。它总是有点晚,这会导致时钟慢慢漂移。 * getTime *也不需要。要向日期添加一秒,请使用'date.setSeconds(date.getSeconds()+ 1)'。 – RobG
关于setTimeout的使用情况,使用setInterval可能会更好一些,如果还有其他方式我不知道它,但这是我想到的第一种方式,所以我发布了它,并感谢getTime的替代方案,这个答案会为我节省大约两个小时的浪费时间,哈哈,我想时间学习是永远不会浪费的。 –
可能最好的解决方案是Alex K:从服务器发送时间,并与客户端有所不同。四舍五入到最接近的15分钟(这是时区的最小增量),并且每次创建新日期时都应用该偏移量以显示时间。要保持合理准确的时钟滴答声,请依次调用setTimeout,并根据当前Date的毫秒数加上下一个整秒后大约10毫秒的值来延迟下一次调用。 – RobG
- 1. Javascript:更改日期对象
- 2. 日期对象javascript
- 3. 用Javascript更新日期
- 4. JSON对象日期最新的JavaScript日期格式的symfony
- 5. javascript日期()对象返回有效但不新的日期()
- 6. javascript日期对象UK日期
- 7. JavaScript日期对象重置
- 8. JavaScript日期对象比较
- 9. 全部JavaScript日期对象?
- 10. 延长Javascript日期对象
- 11. 初始javascript日期对象
- 12. 浏览javascript日期对象
- 13. 使用jQuery更改日期对象日期
- 14. JavaScript对象模式的定期更新对象
- 15. 更新JavaScript对象
- 16. 使用Javascript更新JSON对象
- 17. 新格式日期对象
- 18. 用日期序列化json对象 - javascript
- 19. 要更新的JavaScript结束日期更改开始日期的日期
- 20. 更改日期对象的时区而不更改日期
- 21. 更改日期到列表中的所有对象,并更新
- 22. 在Safari中使用Javascript的新日期()
- 23. Javascript测试中的假日期对象
- 24. JavaScript的日期和python DateTime对象
- 25. 得到天数的javascript日期对象
- 26. JavaScript日期对象来表达(日期内日)
- 27. 日期对象不如使用的setDate
- 28. 使用字符串的日期对象
- 29. 更新JavaScript对象属性?
- 30. JavaScript的日期对象:错误在使用addDays功能
'setInterval'可以是你的朋友。 –
确实,'setInterval()'可以让你更新本地的Date对象,但它仍然会使用客户端时钟。 – Pointy
你有时区问题?如果是在客户端和服务器中都使用utc。 – Alon