- ベストアンサー
現在時刻から指定時刻までの時間差分を計算
setInterval(next, 1000); //1:30後の時刻取得 function get_next(){ nextTime = new Date(); nextTime.setTime(nextTime.getTime() + 90*60*1000); } function next(){ nowTime = new Date(); outputTime = nextTime.getTime() - nowTime.getTime(); getElementById('output').innerHTML = outputTime; } これで1時間30分後までの時間差分をミリ秒で取得は出来てるんですが これを1秒ごとに実行して これをx時間x分x秒後 という感じに表示させたいのですが何か良い方法はありませんか?
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じで <script> //1:30後の時刻取得 function get_next(){ nextTime = new Date(); nextTime.setTime(nextTime.getTime() + 90*60*1000); } function next(){ nowTime = new Date(); outputTime = nextTime.getTime() - nowTime.getTime(); outputTimeStr=parseInt(outputTime / (60*60*1000))+"時間"; outputTimeStr+=parseInt((outputTime % (60*60*1000)) / (60*1000))+"分"; outputTimeStr+=parseInt((outputTime % (60*1000)) / 1000)+"秒"; document.getElementById('output').innerHTML = outputTimeStr; } window.onload=function(){ get_next(); setInterval(next, 1000); } </script> <div id="output"></div>
その他の回答 (5)
- babu_baboo
- ベストアンサー率51% (268/525)
#3です。みじかいのがすきだとおもうので。 function hoge(a,o) { var x=60,y=x*x,z=1000,e=document.getElementById(o),t=(new Date).getTime()+a*z,u; return e?function(){if((u=(t-(new Date).getTime())/z|0)<=0)t+=a*z; e.firstChild.nodeValue=(u/y|0)+'時間'+((u%y)/x|0)+'分'+(u%x)+'秒'}:null }
- babu_baboo
- ベストアンサー率51% (268/525)
#3です。 >タイムアップ時に一瞬だけ『 -1時間-1分-1秒 』と表示されるかも。 なぁ~にぃ~~~。やっちまったなぁ~~~。 以下修正。 tt = ( t - (new Date).getTime() ) / 1000; を tt = int( ( t - (new Date).getTime() ) / 1000 ); に。 もうしわけない。
- fujillin
- ベストアンサー率61% (1594/2576)
#2です。 以下、無視してください。 タイムアップ時に一瞬だけ『 -1時間-1分-1秒 』と表示されるかも。 input制限知らんかった < おはずかし。
- babu_baboo
- ベストアンサー率51% (268/525)
たいむあっぷなしで。えんどれす? <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <title>TEST</title> <body> <div id="a"> </div> <script type="text/javascript"> function hoge ( secondTime, outId ) { var e, t, f; var int = Math.floor; if( e = document.getElementById( outId ) ) { t = (new Date).getTime() + secondTime * 1000; f = function ( ) { var h, m, s, tt; tt = ( t - (new Date).getTime() ) / 1000; if( tt <= 0 ) t += secondTime * 1000; h = int( tt / 3600 ); m = int( (tt % 3600 ) / 60 ); s = int( tt % 60 ); e.firstChild.nodeValue = h + '時間' + m + '分' + s + '秒'; }; // f(); return f; } return null; } var fuga = hoge( 90 * 60, 'a' ); fuga && setInterval( fuga, 1000 ); </script>
- fujillin
- ベストアンサー率61% (1594/2576)
変数はできるだけvarで定義して、グローバルにしないほうがいいかも… 基本的には、得られているミリ秒を1000で割れば秒が求められ、あとは60進法で考えればよろしいかと。 そのままの例は#1様が回答済みなので、タイムアップしたら自動で止まる例 * 分と秒は常に00の2桁表示、時間は数値に応じて表示。 * 残り0秒になったら「Time Up!」表示にかわり、自動的に停止します。 * 仮に値が24時間を越えても25、26・・・で、日数換算はしていません。 (と言うような値にはならないけれど…) ご参考までに。 <script type="text/javascript"> window.onload = function() { var output = '', tmp, deff , i = 0; var sep = ',秒,分,時間'.split(','); if (!this.time) this.time = new Date(); deff = new Date() - this.time; deff = Math.round(90*60 - deff/1000); if (deff > 0) { while (i < 2) { tmp = '0' + (deff % 60), deff = Math.floor(deff / 60); output = tmp.substr(tmp.length-2) + sep[i++] + output; } output = deff + sep[3] + output; setTimeout(arguments.callee, 500); } else { output = 'Time Up!!'; } document.getElementById('output').innerHTML = output; } </script>