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