ネットワークタイムサーバから時刻もってくる

カウントダウンのアプリなのに,デバイス毎に時刻違うってダメじゃん.

ということで,NTP(ネットワークタイムサーバ)から時刻もってくるの.

NTPについては(ここ)みんなのスマホもこれ時間合ってるんだよ。

これ,コンソールに時刻差出します.(多分コンソールで出る数字はミリ秒)

<!DOCTYPE html>
<html>
<head>
<title>Time</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no">
<!-- metaタグで スマホの挙動を制限している -->
</head>
<body>

<script type="text/javascript">


httpObj = new XMLHttpRequest();
httpObj.open("get", "https://ntp-a1.nict.go.jp/cgi-bin/json", true);
httpObj.onload = function(){

	var myData = JSON.parse(this.responseText);
	//var mySt = myData.st;
	var mySt = (myData.st * 1000) - Date.now();
	//var txt = "";
//	for (var i=0; i<myData.weather.length; i++){
//		txt = txt + myData.weather[i].description + "  " + myData.weather[i].main+"<br>" + "<img src=http://openweathermap.org/img/w/" + myData.weather[i].icon + ".png>";
//	}

	console.log(mySt);

}
httpObj.send(null);


</script>



</body>
</html>

で,現時刻との差分ですが

まず,コードの上の方の初期化あたりに

///ネットワーク時刻取得
var mySt;
httpObj = new XMLHttpRequest();
httpObj.open("get", "https://ntp-a1.nict.go.jp/cgi-bin/json", true);//NTPサーバに行って時間取得
httpObj.onload = function(){

	var myData = JSON.parse(this.responseText);//JSONで内容をmyDataに入れる
	mySt = (myData.st * 1000) - Date.now();//IDがstの数字をひっぱってくる.NTPの戻り値は小数点以下3桁まであるので,1000描けてUNIX時間に変更する.ほんでミリ秒の誤差を出す

}
httpObj.send(null);

いれておいて(2行目のvar myStがグルーバル変数になります)

そのあとの日付ほしいところで

var nowDate = new Date(Date.now() + mySt);//ネットワークタイムを利用して時差を埋める

で,日付入れてます.

カウントダウンなので毎回new Date();していますが,本当はこの時刻を100ミリ毎くらい引いていけばいいのですが,元のプログラムを大幅に変更するのがいやだったので,,