前提・実現したいこと
指定時間の間は、指定したアプリを開かないChrome拡張機能を作成しました。指定時間は任意で複数用意することができます。
そのアプリの中で時間判定、すなわち現在時刻は設定時刻の範囲内にあるのかどうかの処理の記述があります。
発生している問題・エラーメッセージ
その記述の書き方が結果としてif文の多いものとなってしまい腑に落ちなくなってしまいました。
getTimeの中身ですが、
{'set1' : { [12, 00], [16, 00] } }
{'set2' : { [22, 00], [1, 00] } }
...
のように、開始時刻と終了時刻の順番で配列を格納しています。
JavaScript
1function hoge(data){ 2//最初に呼び出される関数 3 const getSort = Object.keys(data).sort(( a, b ) => data[a][0] > data[b][0] ? 1 : -1); //データを開始時刻を基準に昇順で並べ替えている 4 for( let i = 0; getSort.length > i;i++ ) { 5 let getTime = data[getSort[i]]; 6 const result = timeFind(getTime); 7 (この行にあったresultがtrueだった場合にページ遷移する処理は省略しました) 8 } 9 } 10}); 11 12const timeFind = (getTime) => { 13//この関数の中でif文がたくさん出てきますがもっとシンプルに書ける気がしていますが思いつきません。 14 const today = new Date(); 15 const nowHour = today.getHours(); 16 const nowMin = today.getMinutes(); 17 const startHour = Number(getTime[0][0]); 18 const finishHour = Number(getTime[1][0]); 19 const startMin = Number(getTime[0][1]); 20 const finishMin = Number(getTime[1][1]); 21 22 const termHour = finishHour - startHour; 23 24 if(termHour < 0) { 25 // 日を跨ぐ時間の処理 26 if(nowHour > startHour || nowHour < finishHour) return true; 27 } 28 29 if(termHour > 0) { 30 if(nowHour > startHour && nowHour < finishHour) return true; 31 } 32 33 if(termHour === 0){ 34 if(nowHour === startHour && nowHour === finishHour) { 35 const result = nowMin >= startMin && nowMin <= finishMin ? true : false; 36 return result; 37 } 38 } 39 40 if(nowHour === startHour) return StartMin(startMin); 41 if(nowHour === finishHour) return FinishMin(finishMin); 42 43 function FinishMin(finishMin) { 44 const result = nowMin <= finishMin ? true : false ; 45 return result; 46 } 47 48 function StartMin(startMin) { 49 const result = nowMin >= startMin ? true : false ; 50 return result; 51 } 52//ここまで全てfalseであればfalseを返すためのreturn 53 return false; 54}
teratail投稿用にコメントをたくさん挿入しました。
試したこと
最初はif文を2,3回ほどで記述したものがあったのですが、日を跨いだり、時間判定した後に分判定を入れることを想定していなかったために思ったように動きませんでした。
それから修正バージョンも考えたのですがそれもうまく記述できず。if文をたくさん使うことにしましたがもっとスッキリさせたいです。
補足情報(FW/ツールのバージョンなど)
生JavaScript
Chrome拡張機能のローカルストレージにデータを格納