JavaScriptで日付計算してアラート

このQ&Aのポイント
  • JavaScriptで日付計算してアラート方法を勉強中です。以前の質問の回答がとても参考になりました。今回も質問があります。
  • スクリプトで表示する日付範囲の設定や、本日の日付の色付けなどは理解できました。ただ、初期表示で前日の日付が表示される場合、どこを修正すればいいのかわかりません。
  • 私の勉強不足で部分的にしか解読できないため、教えていただけると助かります。
回答を見る
  • ベストアンサー

JavaScriptで日付計算してアラート 再度勉強中

以前、「JavaScriptで日付計算してアラート」ということで質問させていただきました。ものすごく助かりました。 pipiさんが回答してくださったものの動きや考え方がとても良かったので改めて勉強させてもらっています。 そこでわからなかったので再度質問したいと思います。 スクリプトは検索して見ていただければ良いと思いますのでここでは書きませんが、何日前から何日後までselect内に表示させるかというところはぼんやりわかりました。 今日を判定する部分も、selectボックスで本日部分が着色してあるのもいいのですが、初期表示として前日がselectボックスで表示されています。そのままSUBMITすれば今日の日付が送られるので問題は無いのですが、やはり見た目も今日の日付にしたいので、これをどこで修正すればいいのかがわかりません。 もちろんまだまだ勉強不足の私が悪いのですが部分的に解読する方法でしか、まだ解らないので宜しくご教授ください。

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

  • ベストアンサー
noname#84373
noname#84373
回答No.2

もしかすると 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@*/); } } とか。。

marixka
質問者

お礼

とりあえず検証をしているのですが、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 引き続き検証してみます

marixka
質問者

補足

おそくなってすみません あのときは仕様などで年月日を3つのフォームにわけるようにしていましたので^^; でも、やりかたはものすごくpipiさんのものが気に入っていました^^ 名指しって普通しないのでしょうかねw

その他の回答 (3)

noname#84373
noname#84373
回答No.4

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); にするだけで普通に表示されるんですけど・・・

marixka
質問者

お礼

setSelectOption('a',txt,val,0,0); setValue(0); ここ・・・ わけわからずに以前1にしたままでした・・・

marixka
質問者

補足

検証を終えました。 結局リロードが完全にできていない状態だったりしたようで、 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);}'; ?> 何日前から何日後まで検索可能にするか設定できるように設定ページを作成し上記のようにしました。 ほぼ思い通りに作ることができました。 ほぼメールのやり取りのような感じでしたが、これも誰かの為になるかもしれないですね^^ ありがとうございました。

noname#84373
noname#84373
回答No.3

わかった~! というか俺もうっかり忘れてた! 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を足すか引くかしておくれ~!

marixka
質問者

補足

書式があってるのかわからないのですが 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()]+')';} ここらあたりも同時に調整するのかわからずに模索調整中です。

noname#84373
noname#84373
回答No.1

初めてだなぁ~名指しで・・・^^; しかもあの時は、私のものは採用されず、どんなに落胆したことか・・^^; 初期値は「今日」だと思うのだが・・・ setSelectOption('a',txt,val ,-1,-1); setValue(-1); -1の部分を同じ数値にして、相対的に指定する 明日だったら1にするとか・・・。 年月日を本当ならhidden属性にして隠すとか?

marixka
質問者

補足

今は何日前と何日後をフォームからテキストに書き出し、その設定ファイルをPHPで読み込んでこのスクリプトに組み込んで、設定の変更を自在にするようにして動かそうとしています。 とりあえずそこまではなんなく出来ましたが。。。 もういちど書いて頂いたものを入れ替えたりしてみながら検証してみます。

関連するQ&A

  • JavaScriptで日付計算してアラート

    はじめまして。 どうやってJavaScriptでフォームの内容を取得して計算させるかわからなくて相談させてください。 単に今日の日付を取得して+10日後とかの表示はなんとかできたのですがなにぶん初心者ですのでそれ以上のことはさっぱりです^^; やりたいことはフォームで年、月、日を選択して検索ボタンを押すと検索のPHPにフォームの内容を送るというものです。 そこで、指定の日数以降、以前の日付を選ぶとアラートが出るようにしたいのです。(今日より30日以前と30日以降を選ぶとアラートがでる) ご教授のほどよろしくお願いします。 以下今まで作ったソースです。 できればこれに組み込みたいので・・・ <script type="text/javascript"> <!-- function FormCheck(Form) { Error = new Array(); i = 0; // 年の選択チェック if ((Form["yyyy"]) && (Form["yyyy"][0].selected == true)) { Error[i] = "年は必須項目です。"; i++; } // 月の選択チェック if ((Form["mm"]) && (Form["mm"][0].selected == true)) { Error[i] = "月は必須項目です。"; i++; } // 日の選択チェック if ((Form["dd"]) && (Form["dd"][0].selected == true)) { Error[i] = "日は必須項目です。"; i++; } // 未入力があればアラート if (Error.length > 0) { ErrorText = Error.join("\n"); alert ("未入力の項目があるので検索できません。\n\n"+ErrorText); return false; } } // --> </script> <form name="trace" action="kensaku.php" method="GET" onsubmit="return FormCheck(this)"> <TABLE><TR><TD> <select name="yyyy" size="1"> <option value=""></option> <option value="2008">2008</option> <option value="2009">2009</option> </select>年 <select name="mm" size="1"> <option value=""></option> <option value="01">01</option> <option value="02">02</option> <option value="03">03</option> <!-- ~~~~略~~~~~ --> <option value="12">12</option> </select>月 <select name="dd" size="1"> <option value=""></option> <option value="01">01</option> <option value="02">02</option> <option value="03">03</option> <!-- ~~~~略~~~~~ --> <option value="31">31</option> </select>日 </TD></TR> <TR><TD><INPUT TYPE="submit" name="submit" VALUE="検索"></TD></TR> </TABLE>

  • セレクトボックス日付同士の比較について

    以下をどなたか教えていただけないでしょうか?よろしくお願いします。 二つのセレクトボックスで年/月/日を作成する。 さらに追加ボタンを押したときに 1.日付を比較しどちらかが一方が存在しない場合アラートを表示する。 2.開始日と終了日が前後していたらアラートを表示する。 3.OKであればテキストボックスに日付を出力する 以上です。javascript初心者ですが、よろしくお願いいたします。

  • javascriptのalertについて

    VS2005でWebアプリケーションを開発しています。 ASP.netではMsgBoxが使えないのでjavascriptのalertでメッセージを表示していますが、再表示かける前のメッセージボックスの表示で悩んでいます。 再表示にResponse.Redirectを使用していますが、これをつかうとalertが出ないので代替案を探索中です。 なにかほかに使えそうなのってありますか? よろしくお願いします。m(_ _)m ちなみにASP.netはちょっとしかさわったことのない初心者です

  • 複数のselectボックスの動的リンク

    javascriptを使って複数のselectボックスを動的にリンクさせ、なおかつ一度選択すると、次回開いたときにselectボックスの値が前回選んだ値と同じものが初期値になる、というようなことがしたいのですがやり方がわかりません。どなたか教えてくださいっ!! 例)select1:統轄名   select2:営業所名   select3:担当者名   select4:担当店   textボックス  :日付を手で入力 上下に分かれたフレームの上のフレーム部分に上記のように4つのselectボックスと1つのtextボックスがあり、 1.select1で統轄を選ぶとselect2にはその統轄内の営業所だけが表示される 2.select2で営業所を選ぶとselect3にはその営業所の担当者だけが表示される 3.select3で担当者を選ぶとselect4にはその人が担当しているお店が表示される 4.更にお店を選んでtextボックスに日付を入力すると、その日付以降の注文が下のフレームに表示される そして次回表示したときには、前回選んだものがselectボックスの初期値になっている というようなことがしたいのです。 よろしくお願いします★                  

  • javascriptでのセレクトボックスについて。

    javascriptを使ったセレクトボックスについて教えてください。 教えてgooのカテゴリ選択のように、セレクトボックスでjavascripを使い、 一つめのselectボックスでは ・1 ・2 ・3 のオプションを選択可能に 二つめのselectボックスでは、 1が選択されたら ・1の1 ・1の2 ・1の3 のオプションを選択可能に 2が選択されたら ・2の1 ・2の2 ・2の3 を選択可能に 3が選択されたら ・3の1 ・3の2 ・3の3 を選択可能に と言う風にはどうすれば出来るでしょうか? 教えてください、お願いします。

  • 削除アラート

    javascriptで削除のテキストボックスを表示したいのですがどうかけばいいんですか。 これってアラートっていうんでしたっけ 「はい」と「いいえ」の処理をお願いします

  • アラートチェック_javascript

    javascript初心者です。 15個のテキストボックスに0or1のみ入力されるようにチェックを行いたいです。 ★のところでランタイムエラーが出ます。 <SCRIPT LANGUAGE="javascript"> <!-- var isFristTime = false; function fn_submit(obj) { for(var a=1; a<16; a++){ var flag = "fl1_" + a; ★ if(obj.flag.value.match(/^[0-1\s]$/)){ alert("フラグは0か1のみです。"); break; } } } // --> </script> </head> <body> <form name="form0" action="alert_test.asp" method="POST" OnSubmit="return fn_submit(this);"> <table border="1" bordercolor="#000000" rules="none"> <tr> <% for i=1 to 15 flag = "fl1_"&i %> <td>フラグ<%= i%></td> <td width="50" align="left"> <input type="text" name=<% =flag %> style="IME-MODE: disabled" size="2" maxlength="1" value="0"></td> <tr> <% next %> </tr> </table> <input type="submit" value="チェック"> </form>

  • セレクトボタンで特定の項目でアラート表示

    セレクトボタンで特定の項目でアラート表示 はじめまして。 当方javascript初心者です。 ラジオボタンやチェックボックスで特定のボタンを選択すると アラートが出る、いうことをしています。 ですが、セレクトボタンで特定のボタンを選択したらアラート という事ができません。 「スイカ」と「りんご」に同じアラートを出すには どうすればいいのか、いろいろとサイトを巡っているのですがわかりません。 もう1日この問題で詰まってます。 <form> <table cellpadding="5"> <tr> <td> <input type="radio" onclick=alert('コメント')>100円 <input type="radio" 200円 </td> </tr> <tr> <td> <select name="select"> <option>とくに無し</option> <option>スイカ</option> <option>りんご</option> </select> </td> </tr> </table> </form> どなたかいい方法をご存知の方、是非とも教えていただけないでしょうか。 よろしくおねがいします!

  • javascriptのDOMについてなんですが・・・

    閲覧有難うございます。 JavaScriptのDOMを用いてテキストボックスを生成しようと考えているのですがうまくいきません。 <form name="form" action="index2.php"> <select id="factor" onchange="swicthForm()"> <option value="0">選んでください</option> <option value="1">1個</option> <option value="2">2個</option> <option value="3">3個</option> <option value="4">4個</option> <option value="5">5個</option> </select> </form> <br> <script type="text/javascript"> function swicthForm(){ var options = document.form.factor.value; alert(options); } } </script> を用いてSELECTでいくらを選んだかが表示することが出来ました。 alert(options)の値の分だけテキストボックスなり何なりを生成したいのですがうまくいきません。 どの様にしたらテキストボックスなどを表示できますか?

  • cakephp上のJavascript設定

    CakepPHPのフォームヘルパーで”月”のセレクトボックスを作成、 Javascriptで何月に設定されたかを取得し、2月なら29日まで、4月6月9月11月なら30日までのセレクトボックスを作成する、 という部分を考えています。 View側で echo $this->Form->select('month', $month, $label, array('onChange' => 'return daysPerMonth()')) . "月 "; とし($monthは1~12月)、Javascript側でgetElementByIdで選択された月を取得するところまではできているのですが、Javascriptからの戻り値を取得する方法がわかりません。 ご教授頂けないでしょうか。 また、もっと違った方法でも実現可能なようでしたらそちらもお教え願います。 宜しくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう