質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

773閲覧

入力された値が範囲内かを確認したい

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/04/23 11:04

前提・実現したいこと

入力された日付が、あらかじめ決められた日付の範囲内かを確認したいです。

どのようにすれば判別できるのかわからなかったので、

入力された日付、決められた日付2つ

上記をミリ秒に直して大小関係による条件分岐を行おうと考えました。

発生している問題・エラーメッセージ

範囲内にしても、範囲外にしても「範囲内」(OK)判定になってしまいます。

該当のソースコード

<form> 年月日:<input type="text" id="year" value="" style="width:100px;" placeholder="例:2020/01/01"><br><br> <input type="button" id="btn" value="確認"><br><br> </form> <p id="error"></p><br><br> <p id="answer"></p> var answer = document.getElementById('answer'); var error = document.getElementById('error'); var year = document.getElementById('year'); function calc_day(range1,range2,range3){ var today1 = new Date(range1,range2,range3); var time1 = today1.getTime(); return time1; } year.addEventListener('focusout',function(){ if (!year.value.match(/^\d{4}/\d{2}/\d{2}$/)){ error.innerHTML = '不正です'; answer.innerHTML = ' '; } var year_num = year.value; var y = year_num.split("/")[0]; var m = year_num.split("/")[1] - 1; var d = year_num.split("/")[2]; var change_year = new Date(y,m,d); if(change_year.getFullYear() != y || change_year.getMonth() != m || change_year.getDate() != d){ answer.innerHTML = ' '; error.innerHTML = '不正です'; } else{ error.innerHTML = ' '; btn.addEventListener('click',function(){ var time2 = change_year.getTime(); if(calc_day(1995,0,2) <= time2 <= calc_day(2015,(12 - 1),30)){ answer.innerHTML = 'OKです'; } else { answer.innerHTML = 'NOです'; } }, false); } }, false);

試したこと

console.log で3つの時間を出力すると、ミリ秒で表示され大小関係も「OK」、「NO」になるはずなのですが、上手くいきませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

if(calc_day(1995,0,2) <= time2 <= calc_day(2015,(12 - 1),30)){

って、
if((calc_day(1995,0,2) <= time2 ) <= calc_day(2015,(12 - 1),30)){
という判定文になりますよ

#あえて全角カッコ

投稿2021/04/23 11:07

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/04/23 11:19

ありがとうございます。 if(calc_day(1995,0,2) <= time2 && time2 <= calc_day(2015,(12 - 1),30)) に書き換えたら正常に動きました。 恐れ入りますが、なぜ私が最初に書いたコードだと、 if((calc_day(1995,0,2) <= time2 ) <= calc_day(2015,(12 - 1),30)){ になるのかヒントをいただけますでしょうか?
y_waiwai

2021/04/23 11:54

比較はあくまで2値の比較でしかないからです また、優先順位が同じ演算は、左から順番に行われます 左側の<=の比較がまず先に行われ、その結果を持って右側の<=が行われます
退会済みユーザー

退会済みユーザー

2021/04/23 12:30

ご丁寧にありがとうございます。 理解できました。
guest

0

めんどうであればdatepickerなどを利用されるとよいでしょう。
inputの制限ならpatternでもある程度までは入力を調整できます

投稿2021/04/23 11:10

yambejp

総合スコア116724

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/04/23 11:23

ありがとうございます。 datepickerやpatternというのは初めて聞いたので、後ほど調べさせていただきます。 正規表現等の勉強中につき、上記のようなコードを書いております。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問