0

获取日期和时间服务器后,我将在服务器日期和时间上以1 秒为单位更新时间。
问题:
显示后浏览器会变慢。我认为需要1004 ms 增加1 second. 它看起来很好,Chrome但在IE8.
我的方法:

var serverdate = null;
var elapsedSecond = null;
var startTime = "<%= getServerStartTime()%>";
window.onload=function(){
     setServerDateAndTime();
 };
 function setServerDateAndTime() {
 var currenttime= 'July 06, 2013 13:10:20';
 serverdate = new Date(currenttime);

 elapsedSecond = callAjax(startTime); //It Gets actual Elapsed Second
 serverdate.setSeconds(serverdate.getSeconds() + parseInt(elapsedSecond, 10));
 setInterval(displaytime, 1000); 
 }

 function displaytime(){
    serverdate.setSeconds(serverdate.getSeconds()+1);
    var timestring = serverdate.getHours()+":"+serverdate.getMinutes()+":"+serverdate.getSeconds();
    var date = serverdate.getFullYear() + ""+(serverdate.getMonth() + 1) +""+ serverdate.getDate();
    document.getElementById("serverDateTime").innerHTML = date +"  " + timestring;
}
function callAjax(value1) {
    var result="";
    var dataObj = {serverStartTime : value1};
    $.ajax({
        type : "POST",
        url : '${pageContext.request.contextPath}/utility/frameredirect/elapsedTime.action',
        dataType : 'text',
        data : dataObj,
        cache : false, // guarantees jsp is always called
        async: false,
        success: function(data) {
            result = data;
        }
   });
    return result;
}

我怎么解决这个问题?任何想法将不胜感激。

4

1 回答 1

-1

问题正在发生,因为您正在找出以秒为单位的差异,但 setInterval 是根据毫秒设置的。因此,当它开始运行时,即使是毫秒,也会增加秒差。

因此,在代码中:

function setServerDateAndTime() {
    var currenttime= 'July 06, 2013 13:10:20';
    serverdate = new Date(currenttime);
    elapsedSecond = callAjax(); //It Gets actual Elapsed Second
    serverdate.setSeconds(serverdate.getSeconds() + parseInt(elapsedSecond, 10));
    setTimeout(displaytime, (60-parseInt(elapsedSecond, 10))*1000); 
}

假设 callAjax() 方法为您提供实际经过的秒数,然后用 60 减去 elapsedSecond 将为您提供以秒为单位的差异。所以你可以尝试这样的事情, 60-parseInt(elapsedSecond, 10)

此外,在另一种方法中,您可以使用 setInterval 重复调用 displaytime() 方法。

function displaytime(){
    setTimeout(function () { displaytime(); }, 1000);
    serverdate.setSeconds(serverdate.getSeconds()+1);
    var timestring = serverdate.getHours()+":"+serverdate.getMinutes()+":"+serverdate.getSeconds();
    var date = serverdate.getFullYear() + ""+(serverdate.getMonth() + 1) +""+ serverdate.getDate();

}
于 2013-06-06T06:25:53.987 回答