- ベストアンサー
時刻について
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は装飾せず になる感じです
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
配列などを用いておられないようで、比較処理をどのようにしておられるのかが不明ですが、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 装飾せず ======
その他の回答 (2)
- babu_baboo
- ベストアンサー率51% (268/525)
じぶんなら。 <!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)
私なら 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 { // 何も修飾しない } } } といった具合にしますよ ・・・
お礼
ありがとうございます この方式が一番分かりやすかったので使わせていただきます