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 で減算すると、秒単位の差が得られます。したがって、次のようなものを試すことができます 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 に答える