• ベストアンサー

フォーム日付入力値の減算

画面で日付開始日、日付終了日を入力させて、 日付終了日-日付開始日で範囲を算出し、 20日以上の指定の場合はエラー表示したいです。 今は day=Number(document.form.endDay.value)-Number(document.form.StartDay.value) と記述していますが、dayをalert表示するとNaNと表示されてしまいます。 アドバイスお願いします。

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

  • ベストアンサー
  • STICKY2006
  • ベストアンサー率29% (1536/5269)
回答No.1

こんちは。 データ型がめちゃくちゃだからです。 >>NaN 数字型以外だから出る。 >>Number 数字型に変換する。 まず、終了日と開始日の入力形式が不明。 「2007/02/16」と入力させているのなら、「/」は数字型にはなりえないです。 日付の計算。なので、数字型で計算しようとしても、単純に引き算すればできるってわけでもありません。 一番簡単なのは、日付に変換してから計算する方法なので日付型に変換してから計算してやってください。 「JavaScript 日数 計算」とかでひっかければゴロゴロ出てきますよ。

karen237
質問者

お礼

アドバイスありがとうございます。 参考にさせていただき、下記のコードでできました。 var from_date = new Date(document.Form.From_Day); var to_date = new Date(document.Form.To_Day); var iDay = Math.floor((to_date - from_date)/(24*3600*1000)); if(iDay > 20 ){ alert("エラー"); }

その他の回答 (1)

  • ANASTASIAK
  • ベストアンサー率19% (658/3306)
回答No.2

ここに良い例があります。 http://okwave.jp/qa229618.html

karen237
質問者

お礼

アドバイスありがとうございます。 参考にさせていただき解決しました。

関連するQ&A

  • エクセル2003にて、シートのセル上にあるdate関数の日付の部分を、

    エクセル2003にて、シートのセル上にあるdate関数の日付の部分を、年月日~年月日の日付を指定して、指定した日付ごとに日付が変更された状態で指定した日付分のシート枚数を印刷をしたいと思っていますが、上手く実行できません。※現状は、PCの日付を変更して印刷をしています。 書いたマクロは下記(下矢印)になりますが、修正箇所や良い方法がありましたら、ご伝授宜しくお願い致します。 Sub Test() Dim myPrompt_s As String, myTitle_s As String Dim myPrompt_e As String, myTitle_e As String Dim startDay As Date, endDay As Date, I As Integer On Error GoTo ExitMe '---抽出開始~終了期間を取得します myPrompt_s = "何月何日からですか?" myTitle_s = "印刷開始日付" myPrompt_e = "何月何日までですか?" myTitle_e = "印刷終了日付" startDay = Format(InputBox(myPrompt_s, myTitle_s), "yyyy/m/d") '開始 endDay = Format(InputBox(myPrompt_e, myTitle_e), "yyyy/m/d") '終了 For I = 0 To endDay - startDay Range("C4").Value = Format(startDay + I, "yyyy/m/d") '---印刷します ActiveSheets.PrintOut Next I ExitMe: End Sub

  • フォームの入力チェックをすると既に入力した項目が消える

    実は過去のQ&Aの中でご紹介されていた ホームページを拝見させて頂いたのですが、 残念ながら私の応用力が足りず、 上手く作ることが出来ません。 下記のように書いてみたのですが、 これでは未入力のメッセージにOKを押すと その前に入力したものが全て消えてしまいます。 何方か、正しい書き方をご教示下さいますよう 宜しくお願い申し上げます。 <script language="JavaScript"> <!-- function checkForm(){ if(document.form1.chk1.checked == false && document.form1.chk2.checked == false) { alert('チェックなし'); return false; } { flag = 0; for ( i = 0 ; i < document.form1.radiobtn.length ; i++){ if (document.form1.radiobtn[i].checked){ flag = 1; } } if (!flag){ alert('ラジオなし'); return false; } if(document.form1.sel.selectedIndex == 0){ alert('メニューなし'); document.form1.sel.focus(); return false; } if(document.form1.bun.value == ""){ alert('文字なし'); document.form1.bun.focus(); return false; } } return true; } //--> </script>

  • フォームで複数の関数を1つにまとめる方法

    フォームに関して、必須項目が未入力・未選択の場合に警告する JavaScriptを記述したいのですが、 複数のJavaScriptを1つにまとめるにはどうしたら良いのでしょうか。 具体的には、 【1】テキストフィールド未入力の場合に警告する 【2】メールアドレスが間違いor未入力の場合に警告する 【3】セレクトボックスが未選択の場合に警告する という3つを同じページで同時に設定する方法が分かりません。 記述した内容は下記の通りです。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 【1】 <script type="text/javascript"> <!-- function check(){ var flag = 0; // 設定開始(必須にする項目を設定してください) if(document.form1.field1.value == ""){ // 「お名前」の入力をチェック flag = 1; } else if(document.form1.field2.value == ""){ // 「ご住所」の入力をチェック flag = 1; // 設定終了 if(flag){ window.alert('必須項目に未入力がありました'); // 入力漏れがあれば警告ダイアログを表示 return false; // 送信を中止 } else{ return true; // 送信を実行 } } // --> </script> ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 【2】 <script type="text/javascript"> <!-- function check(){ var flag = 0; // 設定開始(チェックする項目を設定してください) if(!document.form1.email.value.match(/.+@.+\..+/)){ flag = 1; } // 設定終了 if(flag){ window.alert('メールアドレスが正しくありません'); // メールアドレス以外が入力された場合は警告ダイアログを表示 return false; // 送信を中止 } else{ return true; // 送信を実行 } } // --> </script> ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 【3】 <script type="text/javascript"> <!-- function check(){ var flag = 0; // 設定開始(チェックする項目を設定してください) if(document.form1.select1.options[document.form1.select1.selectedIndex].value == ""){// 「地域」の入力をチェック flag = 1; } else if(document.form1.select2.options[document.form1.select2.selectedIndex].value == ""){ // 「生年月」の入力をチェック flag = 1; } else if(document.form1.select3.options[document.form1.select3.selectedIndex].value == ""){ // 「生年日」の入力をチェック flag = 1; } // 設定終了 if(flag){ window.alert('選択されていません'); // 選択されていない場合は警告ダイアログを表示 return false; // 送信を中止 } else{ return true; // 送信を実行 } } // --> </script> ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 【本文】 <form name="form1" onSubmit="return check()"> ■お名前:<input type="text" name="field1" size="30" style="ime-mode:active;"> ■メールアドレス:<input type="text" name="email" size="30" style="ime-mode:inactive;"> ■地域: <select name="select1"> <option value="北海道">北海道</option> <option value="青森県">青森県</option> ・ ・ </select> ■ご住所<input type="text" name="field3" size="60" style="ime-mode:active;"> ■生年月日 <select name="select2"> <option>1</option> <option>2</option> ・ ・ </select>月 <select name="select3"> <option>1</option> <option>2</option> ・ ・ </select>日 </form> ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ JavaScriptの記述経験が殆ど無いため、 出来る限り詳しくご教示願いたく、 よろしくお願い致します!

  • 日曜日と祝日の除いた日付差をカウントしたい

    エクセル2007を使用しています。 開始日と終了日の日曜日と祝日を除いた日付差を算出したいと考えていますが、 日付差の算出ができませんので、どなたか教えてください (土日祝の場合は出来るのですが・・・) F列に開始日 L列に終了日 M列に日付差(-~+で表示) ※開始日の方が大きい場合があります 画像添付していますので、ご参照ください 宜しくお願いします

  • 今日の日付を自動的にセレクトしたいのですが・・・。

    うまくできません。 どなたか助けていただけないでしょうか? よろしくおねがいします。 今のソースはこんな状態です。 onChange="setDate(this.form);"は4月の時に30日までとかにつかっています。 <!--最初に今日の日付を選択したい--> var date=new Date(); var year = date.getYear(); var year= (year< 2000) ? year+1900 : year; var mon=date.getMonth(); var day=date.getDate(); alert(mon); function setNow(form){ for(var i = 0;i<document.nanngatu.nanngatu.options.length;i++){ if(document.nanngatu.nanngatu.options[i].text==mon){ document.nanngatu.nanngatu.options.selectedIndex=i; break; } } } --間は省略-- <onLoad="setNow(this.form)" > <form name="nanngatu"> <select name="nanngatu" onChange="setDate(this.form);" > <option value="32">1</option> <option value="30">2</option> <option value="32">3</option> <option value="31">4</option> <option value="32">5</option> <option value="31">6</option> <option value="32">7</option> <option value="31">8</option> <option value="32">9</option> <option value="31">10</option> <option value="32">11</option> <option value="31">12</option> </select>月

  • 入力フォームのテキストのエラーメッセージについて

    javascript 2つのセレクトボックスを全て選択されていないと、「テキストによるエラーメッセージを表示させるコード」を調べています。 該当コードは<script>■■四角の記号の部分です。 セレクトボックスを2つとも未選択でsubmitを押すと、アラートのメッセージとテキストエラーによるメッセージ2つが同時に表示されるようになっています。 コードはきちんと起動します。 該当部分のdocument.querySelector('.err')?.remove();の意味が理解できずにいます。 insertAdjacentHTMLで出したテキストエラーをセレクトボックスが空欄でない時に非表示にするとい解釈のようですが、あってますでしょうか? class名やid名に('.err')?という名前は使用していませんがドットに.errとクエスチョンマーク?とはどういう意味なのでしょうか? 条件演算子の?でしょうか条件演算子の構文で変数 = 条件 ? 値1 : 値2;の構文とも違うようですし。 分からずにいます。回答よろしくお願いいたします。 ---HTMLのコード--- <body> <form action="form1.php" method="post" id="form"> 選択項目①: <select id="fruits" class="select1" name="fruits"> <option value="">果物を選択する</option> <option value="リンゴ">>リンゴ</option> </select> 選択項目②: <select id="fruits2" class="select1" name="fruits2"> <option value="">食事を選択する</option> <option value="ごはん">>ごはん</option> </select> <div class="alert15"></div><!--alert15 2つのフォーム全て記入がない場合ここにテキストエラーを表示する--> <button id="submit" class="yohaku"> </button> </form> ---javascriptののコード--- <script> const form = document.querySelector('#form'); const fruits = document.querySelector('#fruits'); const fruits2 = document.querySelector('#fruits2'); // セレクトボックスを選択されてないとアラートによるエラーメッセージを表示 form.addEventListener('submit', function(event) { let msg = ""; if (fruits.value == "") msg += "選択項目①:※選択項目①を選択して下い。\n"; if (fruits2.value == "") msg += "選択項目②:※選択項目②を選択してください。\n"; if (msg != "") { event.preventDefault(); alert(msg); } }); </script> ■■ <script> // 2つとも全て選択されてないとテキストによるエラーメッセージの表示 form.addEventListener('submit', e=>{ document.querySelector('.err')?.remove(); document.querySelector('.alert15').insertAdjacentHTML('afterend',`<span class="err">※選択項目①と選択項目②を全て選択して下さい。</span>`); },true); </script> </body>

  • テキストフォームの未入力チェック

    お世話になります。 Javascriptでテキストフォームの入力チェックを行っております。 テキストフォームにはDBから取得した値が入っており、その値を変更して更新できるプログラムを作ろうとしています。 テキストフォームが未入力だった場合に元の値を入れてPOSTリクエストを投げたいのですが方法が分かりません。 (よく見かける未入力だったらアラートを出すというのは出来るのですが・・・) 以下ソースの抜粋になります。 function check(){ for(i=0; i<document.iform1.length;i++){ if(document.form1.elements[i].value==""){ document.iform1.elements[i].valueに元の値を入れたい。 } } <form name="form1" action="updata.php" method="POST"> <input type="button" name ="save" value="更新" onClick="check()"> </form> 以上、ご教示よろしくお願いいたします。

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

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

  • オブジェクト指向で書いた時のフォーム値受取り

    オブジェクト指向で記述したときの、フォームの値の受取の記述方法 がわかりません。 例えば下記のようなフォームがあったとすると ---------------------- <form name="test"> <input type="text" name="name"> <input type="button" value="送信" onClick="testAlert()"> </form> ---------------------- 手続き型では ============================= function testAlert(){  var name = document.test.name.value;  alert(name); } ============================= こんな感じで値を受取りアラート出力できますが、 オブジェクト指向で記述した場合はどうなりますか? ============================= var aaa = function(name){  this.name = name; }; aaa.prototype.test = function(){  return alert(name); }; ============================= こういうような感じだとは思うのですが、ここから先が分かりません。 よろしくお願いします。

  • validateForm firefoxでalertが表示されません

    java scriptについて質問です。 ホームページ内のプルダウンメニューで、項目が選択されていない状態で「submit」ボタンが押された場合、「~を選択してください」というメッセージを表示させたいと思います。 そこで以下のようなfunction validateFormを書いたのですが、alertがIEでは表示されるのにfirefoxでは表示されません。 function validateForm() { if (document.form1.Prop1.options.value == 'Error') { alert('Please select aaa.') document.form1.Prop1.focus() return false } if (document.form1.Prop2.options.value == 'Error') { alert('Please select bbb.') document.form1.Prop2.focus() return false } if (document.form1.Prop3.options.value == 'Error') { alert('Please select ccc.') document.form1.Prop3.focus() return false } if (document.form1.Prop4.options.value == 'Error') { alert('Please select ddd.') document.form1.Prop4.focus() return false } if (document.form1.Prop5.options.value == 'Error') { alert('Please select eee.') document.form1.Prop5.focus() return false } } firefoxでもalertを表示させるには、どのようにすればいいでしょうか? 教えてくださいませ。よろしくお願いします。

専門家に質問してみよう