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

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

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

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

Q&A

解決済

3回答

558閲覧

Date型の○○時~○○時の判定方法

tears

総合スコア100

JavaScript

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

0グッド

0クリップ

投稿2018/09/07 07:51

編集2018/09/07 08:42

日付と時刻を入力できる欄があるのですが、
9:00~17:00の時間帯を外れていた場合、エラーを出したいです。

日付と時刻のコントロールからは、Dateオブジェクトが取得でき、
getHoursとgetMinutesでゴリゴリやればいけるのですが、
1行で判定できるスマートな書き方はないでしょうか。

追記

パッケージを使用しており、HTML記述は変更できないため、
Javascriptでのカスタマイズをしたい、という背景があります。
パッケージのJS記載欄が小さいため、できるだけ少ない行数で
判定できる書き方はないでしょうか。

html

1<div> 2 <input name="{表示のたびランダム作成}" id="{表示のたびランダム作成}" type="text" maxlength="45"> 3 <img width="16" height="15" class="datepicker-trigger"src="cal.gif"> 4 <select name="{表示のたびランダム作成}" id="{表示のたびランダム作成}"> 5 <option value="0">0</option> 6 <option value="1">1</option> 7 <option value="2">2</option> 8 <option value="3">3</option> 9 <option value="4">4</option> 10 <option value="5">5</option> 11 <option value="6">6</option> 12 <option value="7">7</option> 13 <option value="8">8</option> 14 <option value="9">9</option> 15 <option value="10">10</option> 16 <option value="11">11</option> 17 <option value="12">12</option> 18 <option value="13">13</option> 19 <option value="14">14</option> 20 <option value="15">15</option> 21 <option value="16">16</option> 22 <option value="17">17</option> 23 <option value="18">18</option> 24 <option value="19">19</option> 25 <option value="20">20</option> 26 <option value="21">21</option> 27 <option value="22">22</option> 28 <option value="23">23</option> 29 </select> 30 <select name="{表示のたびランダム作成}" id="{表示のたびランダム作成}"> 31 <option value="00">00</option> 32 <option value="05">05</option> 33 <option value="10">10</option> 34 <option value="15">15</option> 35 <option value="20">20</option> 36 <option value="25">25</option> 37 <option value="30">30</option> 38 <option value="35">35</option> 39 <option value="40">40</option> 40 <option value="45">45</option> 41 <option value="50">50</option> 42 <option value="55">55</option> 43 </select> 44</div>

パッケージの設定により、フォーム送信時前にJS処理を設定できるのですが、
id等が表示のたび生成されるため、パッケージ特有の値取得処理があります。

Javascript

1//パッケージにこの形で設定すると 2var a = {コントロール名} 3 4//表示時に以下のような形に変更される 5var a = Utilities.getValue("#コントロールのランダムid")

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

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

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

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

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

mather

2018/09/07 09:32

2つのselectのidは異なると思うのですが、その2つを「パッケージ特有の値取得処理」して console.log した結果を提示してください。
guest

回答3

0

ベストアンサー

00:00 からの経過時間(ミリ秒)

質問前半と後半(HTML)の関係性が不明ですが、前半だけに言及するなら、

JavaScript

1var time = new Date % 86400000;

と書き、「9:00 - 0:00」「17:00 - 0:00」のミリ秒で比較する方法があります。

コード

タイムゾーン込みの時刻を指定するなら、

JavaScript

1function testTimeRange (date, start, end) { 2 var time = (+date + date.getTimezoneOffset() * 100000) % 86400000; 3 4 return time >= start && time <= end; 5} 6 7console.log(testTimeRange(new Date(2018,9,1), 32400000, 61200000)); // false 8console.log(testTimeRange(new Date(2018,9,1,8), 32400000, 61200000)); // false 9console.log(testTimeRange(new Date(2018,9,1,9), 32400000, 61200000)); // true 10console.log(testTimeRange(new Date(2018,9,1,10), 32400000, 61200000)); // true 11console.log(testTimeRange(new Date(2018,9,1,17), 32400000, 61200000)); // true 12console.log(testTimeRange(new Date(2018,9,1,18), 32400000, 61200000)); // false

UTCなら、

JavaScript

1function testTimeRangeUTC (date, start, end) { 2 var time = date % 86400000; 3 4 return time >= start && time <= end; 5}

Re: tears さん

投稿2018/09/07 10:46

編集2018/09/08 01:50
think49

総合スコア18162

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

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

0

HTML

1<input type="text" pattern="(9|1[0-6]):[0-5][0-9]|17:00" required>

投稿2018/09/07 07:56

yambejp

総合スコア114747

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

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

tears

2018/09/07 08:11

パッケージを使用しており、HTML記述部分は修正できないのです。記載不足で申し訳ありません。
yambejp

2018/09/07 08:15

ではHTMLの記述を提示してください。
tears

2018/09/07 08:42

HTMLを追記しました。
yambejp

2018/09/07 08:46

idもnameもランダムが前提ではなにもできませんね selectをなんらかの形で特定する手段はないのですか?
tears

2018/09/07 08:54

パッケージ特有の設定方法で、Javascript(を設定できる項目)に特定のフォーマットで記載すると、 コントロール毎に値を返却してくれます。 例:テキストならば文字 日付ならばDate 最終的に、returnでfalseを返却すると、パッケージがフォーム送信を取りやめ、エラーを出してくれる仕様になってます。 対象の日付のDateを取得し判定しようと考えているのですが、JSの設定欄があまりに小さく、長いコードになると設定画面上にすべて表示されないのです。 そのため、できる限り短い判定方法がないか、という旨で質問しました。
yambejp

2018/09/07 09:14

繰り返しになりますがidやnameで要素を特定できないなら無理です もしできるならたとえば最初のselectが0のときにreturn falseするような サンプルを書いて下さい
tears

2018/09/07 09:29

例えば、inputに2018/01/01 と設定されており、selectが10と55の場合、 パッケージから返却されるDate型は2018/01/01 10:55:00の形で取得できます。 JSでDate型の時分秒の判定はどのような方法があるのか知りたいため質問したのですが、 入力欄やエラーなどHTMLも含めた質問と誤解させるような記載をしてしまい申し訳ありません。
yambejp

2018/09/07 09:47

いまいち要領をえませんが、なんからかのDate型のオブジェクトは得られるのですね? 仮にdとしてよろしいですか? 9:00-17:00(注意:16:59じゃないの?) var d=new Date("2018/01/01 10:55:00"); return (d.getHours()>=9 && d.getHours()<16 ||d.getHours()==17 && d.getMinutes()==0;//true var d=new Date("2018/01/01 17:00:00"); return (d.getHours()>=9 && d.getHours()<16 ||d.getHours()==17 && d.getMinutes()==0; //true var d=new Date("2018/01/01 17:55:00"); return (d.getHours()>=9 && d.getHours()<16 ||d.getHours()==17 && d.getMinutes()==0; //false
guest

0

html の構造が変わらないなら
https://developer.mozilla.org/ja/docs/Introduction_to_using_XPath_in_JavaScript
でxpath指定することば出来ませんか?

投稿2018/09/07 11:47

oikashinoa

総合スコア2826

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問