我一直在做一個頁面,並且我的當前需求之一是它使用服務器的時間運行,而不是由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. 日期對象javascript
- 5. 用Javascript更新日期
- 6. JSON對象日期最新的JavaScript日期格式的symfony
- 7. 使用javascript日期對象問題
- 8. 使用日期對象的javascript日期驗證
- 9. javascript日期()對象返回有效但不新的日期()
- 10. javascript新日期()不更新
- 11. javascript日期對象UK日期
- 12. 使用日期字符串初始化JavaScript日期對象
- 13. Javascript日期對象失敗
- 14. 操縱javascript日期對象
- 15. JavaScript日期對象重置
- 16. JavaScript日期對象比較
- 17. 全部JavaScript日期對象?
- 18. 瀏覽javascript日期對象
- 19. 延長Javascript日期對象
- 20. 乘以日期對象 - javascript
- 21. 初始javascript日期對象
- 22. 比較JavaScript日期對象
- 23. 使用jQuery更改日期對象日期
- 24. 更新JavaScript對象
- 25. 更新JavaScript對象
- 26. JavaScript對象模式的定期更新對象
- 27. 使用Javascript更新JSON對象
- 28. 使用javascript更新json對象
- 29. 新格式日期對象
- 30. 更改日期對象
'setInterval'可以是你的朋友。 –
確實,'setInterval()'可以讓你更新本地的Date對象,但它仍然會使用客戶端時鐘。 – Pointy
你有時區問題?如果是在客戶端和服務器中都使用utc。 – Alon