1. 程式人生 > >JS中Date物件的簡單應用

JS中Date物件的簡單應用

今天是學習JS的第二天,老師留的作業中出現了一部分關於日期的計算。如果用普通方法總感覺太麻煩而且容易錯,所以就是Date物件來解決。不知道是不是我的錯覺,總感覺JS中的Date物件功能比較差,比如求日期間隔。在Delphi中只需要把2個日期變數相減,並且可以自定義日期的顯示方式。我今天使用,結果卻報錯,如何才能格式化日期呢,只能獲取一遍年,再獲取月,獲取日,然後自己拼接,多麻煩啊。不像Delphi裡的formatDateTime

var CurrDate=new Date();//今天的日期
console.log(toDateString(CurrDate));
//報錯了

我省略了HTML部分,需要提前放置nput標籤並設定id屬性。

第一個:輸入年月顯示此月有多少天

  var sYear,sMonth;
    sYear=parseInt(document.getElementById("sYear").value);
    sMonth=parseInt(document.getElementById("sMonth").value);

var date = new Date(sYear, sMonth, 0);
//貌似new date出來的月會比你傳入的值大1,但是天傳入0,顯示的則是上個月最後一天
alert('輸入年月的天數為'+date.getDate());
//getDate()獲取那一天的天數(1-31),這就是那個魚的天數

第二個:輸入年月日顯示星期幾

var sYear,sMonth,sDay,str;
    sYear=parseInt(document.getElementById("sYear").value);
    sMonth=parseInt(document.getElementById("sMonth").value);
    sDay=parseInt(document.getElementById("sDay").value);
var date=new Date(sYear,sMonth-1,sDay);
//sMonth必須減一,估計是外國人的月是從0開始的???

switch(date.getDay()){ //getDay()返回是0-6
                    case 0:str='禮拜天';break;
                    case 1:str='禮拜一';break;
                    case 2:str='禮拜二';break;
                    case 3:str='禮拜三';break;
                    case 4:str='禮拜四';break;
                    case 5:str='禮拜五';break;
                    case 6:str='禮拜六';break;
                    default:str='輸入資料不正確';break;
                }
                alert('輸入的那一天是:'+str);

第三個:輸入年月日返回該日為當年的多少天

年月日返回該日為當年的多少天其實就是在本年中這一天之前有多少天

這個稍微有點難度,因為要考慮閏年與平年,本來是打算判斷閏年再加一,但是借用第一個問題的方法可以無需判斷閏平年。

同時,需要一個迴圈來累加在輸入日期之前的每個月的天數。

 var sYear,sMonth,sDay,SumDay=0;
     sYear=parseInt(document.getElementById("sYear").value);
     sMonth=parseInt(document.getElementById("sMonth").value);
     sDay=parseInt(document.getElementById("sDay").value);
        if(sMonth>1){
                    for(i=1;i<sMonth;i++){
                        SumDay=SumDay+GetDaysOfMonth(sYear,i);
                    }
                    SumDay=SumDay+sDay;
                }else{
                    SumDay=sDay;//如果是1月份就無需迴圈了,比如1月5日,就是當年的第5天
                }
                alert('輸入日期是當年的第'+SumDay+'天');

其中GetDaysOfMonth函式是從第一個問題中提取

function GetDaysOfMonth(sYear,sMonth){

                var date = new Date(sYear, sMonth, 0);
                 return(parseInt(date.getDate()));
            }

第四個:時間間隔

懶得多放控制元件,所以把截止日期預設為當天。

var sYear,sMonth,sDay,d,SumDay=0;
            sYear=parseInt(document.getElementById("sYear").value);
            sMonth=parseInt(document.getElementById("sMonth").value);
            sDay=parseInt(document.getElementById("sDay").value);

            var BeDate=new Date(sYear,sMonth-1,sDay);
            var CurrDate=new Date();//當前系統日期

            //console.log(BeDate);
            //console.log(CurrDate);
           SumDay=Math.floor(Math.abs(Date.parse(CurrDate)-Date.parse(BeDate))/(1000*60*60*24));
            alert(SumDay);

第五個:日期有效性驗證

判斷日期有效性的2種方法,第一種是老師教的,通過if else語句,另一種則是藉助於date物件。

先說第一種。說白就是:一三五七八十臘,三十一天永不變。四、六、九、十一是31天,還有一個2月需要判斷閏年。

var year = parseInt(document.getElementById("textYear").value),;
 month = parseInt(document.getElementById("textMonth").value),;
 date = parseInt(document.getElementById("textDate").value);
	
	//2、判斷
	var str="不合法";
	if(year>=1900){//年份合法
		if(month>=1 && month<=12){//月份合法
			//1、31天的
			if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12){
				if(date>=1 && date<=31){
					 str="合法";
				}
			}else if(month==4 || month==6 || month==9 || month==11 ){//30天的
				if(date>=1 && date<=30){
					 str="合法";
				}
			}else if(month==2){
				if((year%4==0 && year%100!=0)||(year%400==0)){//閏年
					if(date>=1 && date<=29){
						 str="合法";
					}
				}else{
					if(date>=1 && date<=28){
						 str="合法";
					}
				}
			}
		}
	}

第二種,當你將錯誤的年月日組合,然後建立一個date物件時,這個日期其實不對的,比如你放入1月33日,他會自動轉成2月2日.利用這種特性,我們可以判斷你輸入的日期是否合法。(PS.需先驗證你輸入的是數字型)

function IsVaildDate(sYear,sMonth,sDay){
    var IsDate=false;
    var date=new Date(sYear,sMonth-1,sDay);
    if (sYear==date.getFullYear()&&sMonth-1==date.getMonth()&&sDay==date.getDate()){
        IsDate=true;
    }
    return IsDate;
}