Javascriptでサーバーの時間を取得

js-timer

Javascriptで簡単なタイマーをセットしたいという要望があったので、シンプルに作りました。

内容:
セットした時間になったら画像が差し替わるようにしたい。
ただし、phpを使えないのでJavascriptで正確な時間を取得する必要がある。

一般的にphpではサーバー時間(正確な時間)を取得することができ、Javascriptで取得できるのはローカル(PCや携帯端末で設定している)時間だと言われています。

ただ、少し調べればJavascriptでもほぼ正確な時間を取得する方法が出てきます。

 

それがXMLHttpRequestで、ajaxのような非同期通信を実現するためのAPIです。
つまり「便利」ってことですね!!

var request = new XMLHttpRequest;
request.open('HEAD', '#', false);
request.send(null);

var req_t = new Date(request.getResponseHeader('Date'));

これで、変数req_tには「通信時のDateオブジェクト」が定義されています。
つまりサーバーの時間を取得できているということになります。

通信からクライアント側のPC表示までのタイムラグがありますから、秒単位での正確さは保証できません。
しかし分単位、一時間単位なら問題なく使用できるでしょう。

というわけで、今回用意したJavascriptがこちら。

var set_y = 2016; //イベントの年
var set_m = 1; //イベントの月
var set_d = 1; //イベントの日
var set_h = 1; //イベントの時間

var request = new XMLHttpRequest;
request.open('HEAD', '#', false);
request.send(null);

var req_t = new Date(request.getResponseHeader('Date'));

var now_t = req_t.getYear() * 8928 + req_t.getMonth() * 744 + (req_t.getDate() - 1) * 24 + req_t.getHours();
var set_e = (set_y - 1900) * 8928 + (set_m - 1) * 744 + (set_d - 1) * 24 + set_h;

window.onload = function () {
        var before = document.getElementById("set_before");
        var after = document.getElementById("set_after");
        if (set_e > now_t) {
              before.style.display = "block";
              after.style.display = "none";
        } else {
              before.style.display = "none";
              after.style.display = "block";
        }
}

表示を切り替えたい部分のHTMLはこちら。

<img id="set_before" src="img1.jpg" alt="">
<img id="set_after" src="img2.jpg" alt="">

Javascript上部の変数に表示を切り替えたい日時を入力し、HTML側で”set_before”、”set_after”というidを設定すると{display:none}と{display:block}をその時間で入れ替えるという簡単なものです。

 

しかしこの後、「idじゃなくてclassで使えるようにして欲しい」と言われたのは、また次のお話ということで…

よかったらシェアしてね!

この記事を書いた人

フロントエンドエンジニア/星のソムリエ®
お酒と紅茶とチョコレートが大好きです。

コメント

コメントする

目次
閉じる