JS加任意時間

//格式化日期爲年4位,月日時分秒爲2位的格式
	function formateDate(year,month,day,hour,minute,second){
		if(month<9)month="0"+month;
		if(day<9) day="0"+day;
		if(hour<9)hour="0"+hour;
		if(minute<9)minute="0"+minute;
		if(second<9)second="0"+second;
		return year+"-"+month+"-"+day+" "+hour+":"+minute+":"+second;
	}
	
	//函數調用說明
	//date 格式爲2011-08-09 19:21:00,每位數字兩個字符,如果是單數,則必須前面加0;
	//field 取值second  minute  hour  day  month  year 
	//n 取值second(-60~60) minute(-60~60) hour(-24~24) day(-31~30) month(-12~12) year(無窮小~無窮大)以上取值區間均不含頭尾值。
	function showdate(date,field,n){//date爲基數時間格式2011-08-09 19:21:00,n爲秒,可正數也可負數
		var date = date.split(' ');
		var time = date[1].split(':');//時間19:21:00
		var date = date[0].split('-');//日期2011-08-09

		var v_second = parseFloat(time[2]);
		var v_minute = parseFloat(time[1]);
		var v_hour = parseFloat(time[0]);
		var v_day = parseFloat(date[2]);
		var v_month = parseFloat(date[1]);
		var v_year = parseFloat(date[0]);
		if(field=='second'){
			if(n>=60)return '';
			if(n<-60)return '';
			v_second = v_second+n;
			if(v_second>=0&&v_second<60){ //  0=<x<60
				return formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
			}else if(v_second>-60&&v_second<0){// -60<x<0
				v_second = 60+v_second;
				var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
				return showdate(temp,'minute',-1);
			}else{//因爲 控制了n只能在-60到60之間取值(不含首尾),所以上面兩個判斷之後只剩下了 60=<x<120的可能了
				v_second = v_second-60;
				var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
				return showdate(temp,'minute',1);
			}
		}else if(field=='minute'){
			if(n>60)return '';
			if(n<-60)return '';
			v_minute = v_minute+n;
			if(v_minute<60&&v_minute>=0){// 0=<x<60
				return formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
			}else if(v_minute<0&&v_minute>-60){//  -60<x<0
				v_minute = v_minute+60;
				var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
				return showdate(temp,'hour',-1);
			}else{// 60=<x<120
				v_minute = v_minute-60;
				var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
				return showdate(temp,'hour',1);
			}
		}else if(field=='hour'){
			if(n>24)return '';
			if(n<-24)return '';
			v_hour = v_hour+n;
			if(v_hour>=0&&v_hour<24){// 0=<x<24
 				return formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
			}else if(v_hour>-24&&v_hour<0){// <-24x<0
				v_hour = v_hour+24;
				var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
				return showdate(temp,'day',-1);
			}else{// 24=<x<48
				v_hour = v_hour -24;
				var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
				return showdate(temp,'day',1);
			}
		}else if(field=='day'){
			if(n>31) return '';
			if(n<-31)return '' ;
			v_day = v_day+n;
			var flag = false;//平潤年標緻 true表示是閏年
			if(v_year%4==0&&v_year%100!=0||v_year%400==0)flag=true;
			if(v_month==2){
				if(flag){//2月閏年
					if(v_day<=29&&v_day>0){ //0<x<=29&&閏年&&2月份
						return formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
					}else if(v_day>-29&&v_day<=0){// -29<x<=0&&閏年&&2月份
						v_day = v_day + 31;//本月是二月份,向前一個月份借一個月,借的是一月份,一月份有31天
						var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
						return showdate(temp,'month',-1);
					}else{// 29<x<(29+31)&&閏年&&2月份
						v_day=v_day-29;
						var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
						return showdate(temp,'month',1);
					}
				}else{//2月非閏年
					if(v_day<=28&&v_day>0){//0=<x<=28&&平年&&2月
						return formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
					}else if(v_day>-28&&v_day<=0){//-28<x<=0&&平年&&2月
						v_day=v_day+31;//本月是二月份,向前一個月份借一個月,借的是一月份,一月份有31天
						var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
						return showdate(temp,'month',-1);
					}else{//28<x<(28+31)&&平年&&2月
						v_day=v_day-28;
						var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
						return showdate(temp,'month',1);
					}
				}
			}else if(v_month==1||v_month==3||v_month==5||v_month==7||v_month==8||v_month==10||v_month==12){//1 3 5 7 8 10 12月份都有31天
				if(v_day<=31&&v_day>0){// 0<x<=31&& x in (1,3,5,7,8,10,12)
					return formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
				}else if(v_day<=0&&v_day>-31){// -31<x<=0&& x in (1,3,5,7,8,10,12)
					var marchFlag = false;
					if(v_month==3&&flag){//當前月份是潤年的3月,那向上一個月就只能借到29天
						v_day=v_day+29;
						marchFlag = true;
					}else if(v_month==3&&!flag){//當前月份是平年的3月,那向上一個月就只能借到28天
						v_day=v_day+28;
						marchFlag = true;
					}
					
					if(marchFlag == true && v_day<=0){//如果借了2月的天數之後 還是小於0 ,那麼要繼續向上一個月,也就是一月借31天
						v_day=v_day+31;
						var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
						return showdate(temp,'month',-2);//借了2月份的 還要借1月份的
					}else if(v_day<=0){
						v_day=v_day+30;
						var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
						return showdate(temp,'month',-1);
					}else{
						var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
						return showdate(temp,'month',-1);
					}
				}else{// 31<x<(31+31)&& x in (1,3,5,7,8,10,12)
					v_day=v_day-31;
					if(v_day>28&&!flag&&v_month==1){//當前是平年的1月份,減去了31天后,還大於28天,二月份只有28天,也裝不下,所以還要加一個月
						v_day=v_day-28;
						var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
						return showdate(temp,'month',2);
					}else if(v_day>29&&flag&&v_month==1){//當前是潤年的1月份,減去了31天后,還大於29天,二月份只有29天,也裝不下,所以還要加一個月
						v_day=v_day-29;
						var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
						return showdate(temp,'month',2);
					}else if(v_day>30&&v_month!=7){//減了31天后還大於30天,並且當前月份不是7月,那麼還要加一個月。(因爲非7月份的下一個月最多隻有30天。)
						v_day = v_day-30;
						var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
						return showdate(temp,'month',2);
					}else{
						var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
						return showdate(temp,'month',1);
					}
				}
			}else{//非1 3 5 7 8 10 12月 非2月份 只有30天
				if(v_day<=30&&v_day>0){// 0<x<=30 && x in(4,6,9,11)
					return formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
				}else if(v_day>-31&&v_day<=0){//  (1-31)<x<=0 && x in(4,6,9,11)
					v_day=v_day+31;//當前月份的上一個月 無論如何都會是31天
					var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
					return showdate(temp,'month',-1);
				}else{// 30<x<(30+31)
					v_day=v_day-30;
					var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
					return showdate(temp,'month',1);
				}
			}
		}else if(field=='month'){
			if(n>12)return '';
			if(n<-12)return '';
			v_month= v_month+n;
			if(v_month<=12&& v_month>0){// 0<x<=12
				return formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
			}else if(v_month>-12&&v_month<=0){//  -12<x<=0
				v_month=v_month+12;
				var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
				return showdate(temp,'year',-1);
			}else{//  12<x<24
				v_month=v_month-12;
				var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
				return showdate(temp,'year',1);
			}
		}else if(field=='year'){
			v_year =v_year+n;
			//以下代碼處理類似 2010-02-29 12:12:12加一年後變成2011-02-29 12:12:12的情況,2011年並不是閏年,所以沒有29號
			var flag = false;//平潤年標緻 true表示是閏年
			if(v_year%4==0&&v_year%100!=0||v_year%400==0)flag=true;
			if(v_month==2&&v_day==28&&flag)v_day=29;
			
			
			return formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
		}
	}
	
	
	function date1MinusDate2(date1,date2){
		var date1 = date1.split(' ');
		var time1 = date1[1].split(':');//時間19:21:00
		var date1 = date1[0].split('-');//日期2011-08-09
		var second1 = parseFloat(time1[2]);
		var minute1 = parseFloat(time1[1]);
		var hour1 = parseFloat(time1[0]);
		var day1 = parseFloat(date1[2]);
		var month1 = parseFloat(date1[1])-1;
		var year1 = parseFloat(date1[0]);
		debugger;
		var date2 = date2.split(' ');
		var time2 = date2[1].split(':');//時間19:21:00
		var date2 = date2[0].split('-');//日期2011-08-09
		var second2 = parseFloat(time2[2]);
		var minute2 = parseFloat(time2[1]);
		var hour2 = parseFloat(time2[0]);
		var day2 = parseFloat(date2[2]);
		var month2 = parseFloat(date2[1])-1;
		var year2 = parseFloat(date2[0]);
		
		var d1 = new Date(year1,month1,day1,hour1,minute1,second1);		
		var d2 = new Date(year2,month2,day2,hour2,minute2,second2);	
		
		var result = (d1.getTime()-d2.getTime())/(24*60*60*1000)
		return result;
	}
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章