• ベストアンサー

現在時刻から指定時刻までの時間差分を計算

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秒後 という感じに表示させたいのですが何か良い方法はありませんか?

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

こんな感じで <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)

回答No.6

#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 }

回答No.5

#3です。 >タイムアップ時に一瞬だけ『 -1時間-1分-1秒 』と表示されるかも。 なぁ~にぃ~~~。やっちまったなぁ~~~。 以下修正。 tt = ( t - (new Date).getTime() ) / 1000; を tt = int( ( t - (new Date).getTime() ) / 1000 ); に。 もうしわけない。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.4

#2です。 以下、無視してください。 タイムアップ時に一瞬だけ『 -1時間-1分-1秒 』と表示されるかも。 input制限知らんかった < おはずかし。

回答No.3

たいむあっぷなしで。えんどれす? <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <title>TEST</title> <body> <div id="a">&nbsp;</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)
回答No.2

変数はできるだけ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>

関連するQ&A