1. 程式人生 > >js判斷一個時間是不是在某個時間段內

js判斷一個時間是不是在某個時間段內

    我們有時候會遇到這樣的問題,給定一個時間或時間段,判斷該時間或時間段是否在某個規定的時間範圍內,比如公司OA系統規定在提交會議室使用申請時,會議時間不能佔用母嬰時間段,前端必須得進行時間段合法性校驗,那麼我們該如何處理呢?公司規定某會議室的母嬰時段為   9:00-10:00, 12:00 - 13:30,17:00-18:00  會議申請單的時間不能佔用母嬰時間段。


 比如上圖所示 該會議申請單,所選擇的時間段 12:00~13:00 很明顯 佔用了 母嬰時間段規定的 12:00~13:30 中的一部分,所以系統必須提示,該時間段不合法,前端應該警告並中止使用者的提交動作,那麼具體到 JS 程式碼,我們該如何實現這一功能呢?參考程式碼如下:

	 if(saveDraft=='false'){ //提交  暫存時不校驗
					 if(fdHoldPlaceId.value =='14bcfb6f8599a9ca22e99ca4a67ba773'){ //小會議室 具體到某一個會議室才校驗
						 if(checkMatherTime(fdHoldTime.value,fdFinishTime.value)){
							 alert('小會議室 9:00~10:00, 12:00~13:30,17:00~18:00 為母嬰時間段,請重新選擇會議時間!');
							 return;
						 }	 
					 }
				 }

那麼 函式 checkMatherTIme() 是什麼呢 ,如何將 會議開始時間與會議結束時間作為引數進行校驗的,參考程式碼如下

/***
		*檢查是否是母嬰時段 9:00-10:00, 12:00 - 13:30,17:00-18:00
		* fdHoldTime 會議開始時間
		* fdFinishTime 會議結束時間
		* 是母嬰時段 返回 true 不是母嬰時段返回 false
		*/
		function checkMatherTime(fdHoldTime,fdFinishTime){
			 //console.log('fdHoldTime:'+fdHoldTime+'  fdFinishTime:'+fdFinishTime);
			 //母嬰段開始時間
			 var  holdarr = new Array();
			 holdarr[0] = "9:00";
			 holdarr[1] = "12:00";
			 holdarr[2] = "17:00";
			 //母嬰段結束時間
			 var  finisharr = new Array();
			 finisharr[0] = "10:00";
			 finisharr[1] = "13:30";
			 finisharr[2] = "18:00";
			 
			 //根據傳來的會議開始與結束時間來判斷是否在母嬰時間段中
			 var result = false;   //返回結果
			 var checkBorder = false;  //是否校驗邊界 預設不校驗
			 for(var i=0; i<3 ;i++){
			//會議開始時間驗證不驗證邊界值由開始時間是否是母嬰結束時間決定:會議開始時間是母嬰結束時間不驗證邊界值,其他情況必驗邊界值
				 //判斷會議開始時間是否是母嬰時段結束時間
				 if(isCheckBorder(fdHoldTime,finisharr)){
					 checkBorder = true;
				 }else{
					 checkBorder = false;
				 }
				 result = time_range(holdarr[i],finisharr[i],fdHoldTime,checkBorder);
				 //console.log(' fdHoldTime:'+fdHoldTime+' result:'+result);
				 if(result)
					 return true;
			//會議結束時間驗不驗邊界值由結束時間是否是母嬰時間段起始時間決定  : 會議結束時間是母嬰開始時間不驗邊界值,其他情況必驗邊界值
				 //判斷會議結束時間是否是母嬰時段開始時間
				 if(isCheckBorder(fdFinishTime,holdarr)){
					 checkBorder = true;
				 }else{
					 checkBorder = false;
				 }
			     result = time_range(holdarr[i],finisharr[i],fdFinishTime,checkBorder);
					 //console.log(' fdFinishTime:'+fdFinishTime+' result:'+result);
			     if(result)
				    return true;
			 }			 
			 return result;
		}


關於isCheckBorder() 函式

	/**
		*是否需要驗證邊界值
		* fdHoldTime 會議結束時間 比如  12:00  18:00
		* holdarr 母嬰開始時間陣列  "9:00","12:00","17:00"
		* return   true 邊界值校驗   false 邊界值不校驗 
		*/
		function isCheckBorder(endTime,holdarr){
			 for(var i=0 ; i<holdarr.length; i++){
				  if(endTime == holdarr[i])
					  return false;
			 }
			 return true;
		}


關於 time_range() 函式

/**
		*用來判斷一個時間是不是在某個時間段內
		*引數:
        *beginTime 開始時間 
        *endTime 結束時間 
        *varTime 需要判斷的時間
        *falg  true 邊界值校驗   false 邊界值不校驗 
        *返回: true/false
		*/
		function time_range(beginTime,endTime,varTime,falg){  
	        var strb = beginTime.split (":");  
	        if (strb.length != 2) {  
	                     return false;  
	              }  
	        var stre = endTime.split (":");  
	        if (stre.length != 2) {  
	            return false;  
	        }  
	        var strv = varTime.split (":");  
	        if (strv.length != 2) {  
	            return false;  
	        }  
	        var b = new Date ();  
	        var e = new Date ();  
	        var v=new Date();  
	        b.setHours(strb[0]);  
	        b.setMinutes(strb[1]);  
	        e.setHours(stre[0]);  
	        e.setMinutes(stre[1]);  
	        v.setHours(strv[0]);  
	        v.setMinutes(strv[1]);  
	        //console.log(v.getTime()- b.getTime());  
	        //console.log(e.getTime()- v.getTime());  
	        if(falg){//邊界值校驗
		        if((v.getTime()- b.getTime()>=0 && (e.getTime()- v.getTime())>=0)){  
		            return true;  
		        }else {  
		            return false;  
		        }  
	        }else{
		        if((v.getTime()- b.getTime()>0 && (e.getTime()- v.getTime())>0)){  
		            return true;  
		        }else {  
		            return false;  
		        }  
	        }
	    } 


通過以上四段示例程式碼,就實現了對母嬰時間段的校驗,當然函式有進一步優化的空間,這裡只是拋磚引玉罷了,讀者可以自行編寫出合適自己業務的優秀程式碼。