ネットワークタイムサーバから時刻もってくる
カウントダウンのアプリなのに,デバイス毎に時刻違うってダメじゃん.
ということで,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ミリ毎くらい引いていけばいいのですが,元のプログラムを大幅に変更するのがいやだったので,,
