• ベストアンサー

時刻について

var Source = new Date("2009/10/1 00:00:00"); var nowtime = new Date(); var target_1 = new Date(); var target_2 = new Date(); var target_3 = new Date(); var target_4 = new Date(); var target_5 = new Date(); ~~ target_1.setTime(Source.getTime()+1*60*60*1000); target_2.setTime(Source.getTime()+2*60*60*1000); target_3.setTime(Source.getTime()+3*60*60*1000); target_4.setTime(Source.getTime()+4*60*60*1000); target_5.setTime(Source.getTime()+5*60*60*1000); ~~※時間の間隔はこんなにきっかり1時間ごととかではなく分刻み病刻みもあって結構不定期です 基本的にtarget_x < target_x+1で逆になることはないです このようにしてソースの時間から1時間、2時間、3時間~~~後の時間を表示させようとしているんですが target_xが現在より前の場合、文字を灰色に、 次に訪れるtarget_xのみ文字を太字に target_xがそれ以降の場合装飾せず にしたいのですが、 過去はtarget_x < nowtimeで、未来はtarget_x > nowtimeでいいと思うんですが 次に訪れるtarget_xの処理が思いつきません いい比較方法はありますか? 上記の場合 実行した時間が2009/10/1 02:45:00の場合、target_1、target_2は灰色、target_3のみ太字、target_4、target_5は装飾せず 実行した時間が2009/10/1 00:39:00の場合、target_1は太字、target_2、target_3、target_4、target_5は装飾せず になる感じです

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

  • ベストアンサー
回答No.1

配列などを用いておられないようで、比較処理をどのようにしておられるのかが不明ですが、target_xのxが過去から未来への側へ順に処理されるとするならば、フラグ用のBoolean変数(たとえば、check_flag)を一つ用意し、初期値としてcheck_flag=falseとしておき、比較して「過去」だったら、check_flagはそのままとし、比較して「未来」のとき、check_flagがFalseだったならば、「次に訪れるtarget_x」として処理し、続いてcheck_flagをTrueに変更しておけばいいでしょう。 (javascriptではなく、jscriptですが)配列を用いた場合の例と実行結果を書いておきます。 target[5]の時刻よりも20分後をnowtimeとして設定しています。 ====== var Source = new Date("2009/10/1 00:00:00"); var target = new Array(10); var i; for (i = 0; i < 10; i++) { target[i] = new Date(Source.getTime()+i*60*60*1000); } var nowtime = new Date(target[5].getTime() + 20*60*1000); var check_flag = new Boolean(false); for (i = 0; i < 10; i++) { WScript.Echo(target[i]); if (target[i] < nowtime) { WScript.Echo("灰色に設定"); } else { if (check_flag == false) { WScript.Echo("太字"); check_flag = true; } else { WScript.Echo("装飾せず"); } } } === Thu Oct 1 00:00:00 UTC+0900 2009 灰色に設定 Thu Oct 1 01:00:00 UTC+0900 2009 灰色に設定 Thu Oct 1 02:00:00 UTC+0900 2009 灰色に設定 Thu Oct 1 03:00:00 UTC+0900 2009 灰色に設定 Thu Oct 1 04:00:00 UTC+0900 2009 灰色に設定 Thu Oct 1 05:00:00 UTC+0900 2009 灰色に設定 Thu Oct 1 06:00:00 UTC+0900 2009 太字 Thu Oct 1 07:00:00 UTC+0900 2009 装飾せず Thu Oct 1 08:00:00 UTC+0900 2009 装飾せず Thu Oct 1 09:00:00 UTC+0900 2009 装飾せず ======

futaba7777
質問者

お礼

ありがとうございます この方式が一番分かりやすかったので使わせていただきます

その他の回答 (2)

回答No.3

じぶんなら。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <title></title> <style type="text/css"> .Gray { color: #888; } .Bold { font-weight: bold; } .Normal { color: #00f; } </style> <body> <ol id="hoge">  <li>abc</li>  <li>def</li>  <li>ghi</li>  <li>jkl</li>  <li>mno</li> </ol> <script type="text/javascript"> (function () {  var tgt = new Date( 2009,9,1,7,0,0,0);  var css = [ 'Gray', 'Bold', 'Normal' ];  var list= [   [ 1, 0, 0 ],//[ hh, mm, ss]   [ 2, 0, 0 ],   [ 3, 0, 0 ],   [ 4, 0, 0 ],   [ 5, 0, 0 ],  ];  var li = document.getElementById( 'hoge' ).getElementsByTagName( 'LI' );  var i, o;  var checker = (function ( now ) {   return function ( hms ) {    return now + ((hms[0] * 60 + hms[1]) * 60 + hms[2]) * 1000 > (new Date).getTime();   }  })( tgt.getTime() );  var setter = (function ( css ) {   var cnt = 0;   var max = css.length - 1;   return function ( status ) {    return css[ cnt += ( status && cnt < max ) * 1 ];   }  })( css );  for( i = 0; o = li[ i ]; i++) {   o.className = setter( checker( list[ i ] ) );  } })(); </script>

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

私なら targetは配列にします target[0]にSource target[1]にSourceに最初の加算時間 target[2]にSourceに2番目の加算時間 といった具合に設定しておき for ( n = 1; n < target.Length; n++ ) {   if ( target[n] < nowtime ) {     // 灰色修飾のコード   } else {     ' 関係演算子は < がいいのかは検討してください     if ( target[n-1] <= nowtime ) {       // 太字修飾のコード     } else {       // 何も修飾しない     }   } } といった具合にしますよ ・・・