読者です 読者をやめる 読者になる 読者になる

JavascriptでHTMLに日付を表示させるときに、最初のタイムラグをなくす方法

setInterval()で1秒毎に更新させようとしたら、HTMLを読み込んでから1秒後に日付が表示されちゃったので、その逃げ方

もう、タイトルのとおりなのですが、 ちょっと今作ってるものに、HTML上で日付と時間を表示させたかったのです。

で、ちょこちょこと日付と時間を整形するfunctionを書いて、それをsetIntervalで1秒毎に読み込んだら。。。。

最初の読み込みだけ、1秒経たないと表示されないとか orz.

読み込みを10msとかにしたら、タイムラグ無いんだけど、CPUが使われるのが気に食わない。。。むー。

解決策は、予め時刻を表示させておくこと。。。って、なんか矛盾してないか?

まずは、どこかにスクリプトを記載します。
functionは日時を作るものと、その結果をHTML内に書き戻すもの。
そして、HTMLに書き戻すfunctionを1秒毎に呼び出す処理。

<script type="text/javascript">
function makeClock() {
    var nowTime = new Date();
    var nowHour = nowTime.getHours();
    if (nowHour<10){nowHour = '0' + nowHour;}
    var nowMin = nowTime.getMinutes();
    if (nowMin<10){nowMin = '0' + nowMin;}
    var nowSec = nowTime.getSeconds();
    if (nowSec<10){nowSec = '0' + nowSec;}
    var msg = nowHour + ":" + nowMin + ":" + nowSec;
    return msg
}
function showClock() {
   document.getElementById("RealtimeClockArea").innerHTML = makeClock();
}
setInterval('showClock()',1000);
</script>

HTML側には、HTMLに書き戻す処理で指定したidをつけたエリアを準備。
この時、この場所で直接スクリプトタグをつけて、日付を作る関数を呼んで、その結果を書き出す、と。

<p id="RealtimeClockArea"><script type="text/javascript">document.write(makeClock());</script></p>

なんか、あんまり良い対策じゃない気もするけど、お手軽に対応できるから、まぁいいかな、と。初回読み込みの時しか発生しない問題だし、ちょっとしたおまじない程度だねー。