- ベストアンサー
JavaScriptで日付計算してアラート
- JavaScriptで日付計算してアラート方法を勉強中です。以前の質問の回答がとても参考になりました。今回も質問があります。
- スクリプトで表示する日付範囲の設定や、本日の日付の色付けなどは理解できました。ただ、初期表示で前日の日付が表示される場合、どこを修正すればいいのかわかりません。
- 私の勉強不足で部分的にしか解読できないため、教えていただけると助かります。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
もしかすると if(i==30)n.style.backgroundColor='#f88'; の書き方が、やばいのかな? if(value_array[i]==default_value) n.style.backgroundColor='#f88'; に変更する あと.innerHTML部分を.textに var tmp = document.getElementById('a').options[i].innerHTML.match(/(\d+)年(\d+)月(\d+)日.*/); を var tmp = document.getElementById('a').options[i].text.match(/(\d+)年(\d+)月(\d+)日.*/); あとはidだけでなくnameも使えるようにして function setSelectOption( elementId, text_array, value_array, default_value, selected_value){ var element = ( typeof( elementId ) == 'string' )? document.getElementById( elementId ) || document.getElementsByName( elementId )[0]: elementId; while( element.hasChildNodes() ) element.removeChild( element.lastChild ); for(var i=0, mx = text_array.length; i<mx; i++){ var n = new Option( text_array[i], value_array[i], default_value==value_array[i], selected_value==value_array[i]); if(text_array[i].match(/\(日\)/)) n.style.backgroundColor='#fdd'; if(text_array[i].match(/\(土\)/)) n.style.backgroundColor='#ddf'; if(value_array[i]==default_value) n.style.backgroundColor='#f88'; element.add( n/*@cc_on @if(1) @else @*/, null /*@end@*/); } } とか。。
その他の回答 (3)
var n = new Option( text_array[i], value_array[i], default_value==value_array[i], selected_value==value_array[i-1]); を var n = new Option( text_array[i], value_array[i], default_value==value_array[i], selected_value==value_array[i]); 32600000は32400000 setSelectOption('a',txt,val,0,0); setValue(-1); を setSelectOption('a',txt,val,0,0); setValue(0); にするだけで普通に表示されるんですけど・・・
お礼
setSelectOption('a',txt,val,0,0); setValue(0); ここ・・・ わけわからずに以前1にしたままでした・・・
補足
検証を終えました。 結局リロードが完全にできていない状態だったりしたようで、 32400000を増加や減算させなくてもOKでした。 キャッシュとかが残っていたのでしょうか・・・ おかしいので-1入れたりなんだりしちゃったので・・・ 結局ご指示どおり var n = new Option( text_array[i], value_array[i], default_value==value_array[i], selected_value==value_array[i]); setSelectOption('a',txt,val,0,0); setValue(0); 元に戻して .getTime()+86400000*i ここもこのままでOKでした。 今回こんな未熟な私のために、懲りずにご回答くださり本当に感謝しています。 今後ともよろしくお願いします。 今回作ったデータは <?php echo 'for(var i=-'.$setdata[0].', txt =[],val =[];i<'.$setdata[1].';i++){ txt.push( (new Date((new Date).getTime()+86400000*i)).hizuke_JP() ); val.push(i);}'; ?> 何日前から何日後まで検索可能にするか設定できるように設定ページを作成し上記のようにしました。 ほぼ思い通りに作ることができました。 ほぼメールのやり取りのような感じでしたが、これも誰かの為になるかもしれないですね^^ ありがとうございました。
わかった~! というか俺もうっかり忘れてた! for(var i=-30, txt =[],val =[];i<31;i++){ txt.push( (new Date((new Date).getTime()+86400000*i)).hizuke_JP() ); val.push(i);} setSelectOption('a',txt,val ,0,0); setValue(0); </script> のgetTime()って基準時間が違ってたんだった! 9時間のずれ!なので9*60*60*1000を足すか引くかしておくれ~!
補足
書式があってるのかわからないのですが getTime()+86400000*iをgetTime()-32400000+86400000*i にしてみたり、ここの数値をかなり増減してみたりしましたが yyyy、mm、ddのところも表示上1日減ったり増えたりしてselect部分とずれたりしているので、どうもyyyy、mm,ddの部分とselect部分を読み込んでいるところは依存関係であることは間違いないと思われ・・・ for(var i=0, mx = text_array.length; i<mx; i++){ var n = new Option( text_array[i], value_array[i], default_value==value_array[i], selected_value==value_array[i]); この部分か Date.prototype.hizuke_JP = function(){return this.getFullYear().zero(4)+'年'+(this.getMonth()+1).zero(2)+'月'+this.getDate().zero(2)+'日 ('+'日月火水木金土'.split('')[this.getDay()]+')';} ここらあたりも同時に調整するのかわからずに模索調整中です。
初めてだなぁ~名指しで・・・^^; しかもあの時は、私のものは採用されず、どんなに落胆したことか・・^^; 初期値は「今日」だと思うのだが・・・ setSelectOption('a',txt,val ,-1,-1); setValue(-1); -1の部分を同じ数値にして、相対的に指定する 明日だったら1にするとか・・・。 年月日を本当ならhidden属性にして隠すとか?
補足
今は何日前と何日後をフォームからテキストに書き出し、その設定ファイルをPHPで読み込んでこのスクリプトに組み込んで、設定の変更を自在にするようにして動かそうとしています。 とりあえずそこまではなんなく出来ましたが。。。 もういちど書いて頂いたものを入れ替えたりしてみながら検証してみます。
お礼
とりあえず検証をしているのですが、19日午後4時にチェックしたら yyyy,mm,ddにはきちんとした数値が入っています。 しかしセレクトボックスには前日の18日が表示されています。 本日の着色はちゃんと19日になっています。 リロードしても同じなのです。 Javascriptですので関係ないとは思いますがサーバーの時間はFFFTPの画面でファイルの時間を見るとほぼ正確な時刻になっています。もちろんローカルマシンの時間は合っています。 コード部分だと for(var i=0, mx = text_array.length; i<mx; i++){ var n = new Option( text_array[i], value_array[i], default_value==value_array[i], selected_value==value_array[i]); ここのselected_value==value_array[i]あたりだと思いますが・・・ 先日、1日ずらすため[i-1]にしたところ、その日はよくても翌日になるとどちらかへずれていました・・・ 夕方の午後5時付近でずれがなくなるように思います。 おそらくそのあたりで日付が変わっていると判断されているような・・・ 参考までにとりあえずアップしたURLをペタリと ttp://vvvvvvvvvv.net/test/index.html 引き続き検証してみます
補足
おそくなってすみません あのときは仕様などで年月日を3つのフォームにわけるようにしていましたので^^; でも、やりかたはものすごくpipiさんのものが気に入っていました^^ 名指しって普通しないのでしょうかねw