時間帯重複チェック
お題:時間帯重複チェック - No Programming, No Life
だらだらとなってしまいました
<html> <head> <script type="text/javascript"> var DateRange = function(stH, edH, stM, edM){ var checkHour = function(obj){ return 0 <= obj.stHour <= 24 && 0 <= obj.edHour <= 24; }; var checkMinitue = function(obj){ return 0 <= obj.stMinitue <= 59 && 0 <= obj.edMinitue <= 59; }; var checkDateRange = function(obj){ return obj.stHour < obj.edHour ? true : obj.stMinitue <= obj.edMinitue; }; var tostring = function(val){ return val <= 9 ? "0" + val.toString() : val.toString(); } this.stHour = parseInt(stH, 10); this.edHour = parseInt(edH, 10); this.stMinitue = parseInt(stM, 10); this.edMinitue = parseInt(edM, 10); this.inRange = function(dateRange){ if(this.stHour <= dateRange.stHour && dateRange.stHour <= this.edHour){ if(Math.abs(this.edMinitue - this.stMinitue) > 1) return true; } return false; }; this.toString = function(){ return tostring(this.stHour) + ":" + tostring(this.stMinitue) + "〜" + tostring(this.edHour) + ":" + tostring(this.edMinitue); }; if(!checkHour(this) || !checkMinitue(this) || !checkDateRange(this)){ throw { name : "InvalidValue", message : "時間範囲不正" }; } }; function onClick(){ var getRange = function(rangeSrc){ return new DateRange(rangeSrc.sth, rangeSrc.edh, rangeSrc.stm, rangeSrc.edm); } var datas = [ [ {sth : 1, stm : 0, edh : 5, edm : 30}, {sth : 9, stm : 0, edh : 23, edm : 0} ] //重複なし , [ {sth : 1, stm : 0, edh : 2, edm : 0}, {sth : 2, stm : 0, edh : 3, edm : 0} ] //重複なし , [ {sth : 1, stm : 0, edh : 2, edm : 1}, {sth : 1, stm : 59, edh : 3, edm : 0} ] //重複あり , [ {sth : 1, stm : 0, edh : 2, edm : 0}, {sth : 1, stm : 0, edh : 2, edm : 0} ] //重複なし , [ {sth : 10, stm : 15, edh : 10, edm : 45}, {sth : 9, stm : 15, edh : 12, edm : 55} ] //重複あり ]; for(var i=0;i<datas.length;i++){ try{ var range1 = getRange(datas[i][0]); var range2 = getRange(datas[i][1]); var msg = "(" + range1.toString() + " vs " + range2.toString() + ")"; if(range1.inRange(range2) || range2.inRange(range1)) msg = "重複あり " + msg; else msg = "重複なし " + msg; }catch(e){ msg = e.message; } window.alert(msg); } } </script> </head> <body> <input type="button" value="チェック" onclick="onClick();"> </body> </html>