JavaScript中判斷日期是否相等


問題

做一個節日提示網頁,首先獲得當前日期,然后與最近的節日比較,如果恰好是同一天,提示“XX節快樂!”否則,提示“離XX節還有X天”。判斷是否恰好同一天的時候我用了類似如下代碼:

var today=new Date();
var valentine=new Date(today.getFullYear(),1,14);
if(today==valentine){
	alert("情人節快樂!");
}else if{
...
}

調試時,我為了能測到恰好是情人節的情況,又特意把today改成情人節了:

var today=new Date(2015,1,14);

結果沒有執行到alert部分,控制台監視以后發現,today==valentine部分,返回的是false,自然就跳過了。

解決

用如下方式都可判斷兩日期是否相等:

第一種:

if(date1.getTime()==date2.getTime()){
...
}

第二種:

if(date1-date2==0){
...
}

說明

1.為什么”==“判斷返回false?
日期對象是引用類型,而非值類型。

引用類型與值類型的區別在於:
值類型的變量:值就保存在棧內存中,訪問變量時操作的就是實際的數據值。
引用類型的變量:變量只是保存了一個引用或者說是指針,這個引用或指針指向一個堆內存中的位置,這個位置才是保存了真正的數據值。訪問引用性變量時,先從棧中取得這個內存位置,然后找到數據值。

所以用“==”比較today和valentine時,比較的不是兩個數據值,而是兩個不同的引用,這兩個引用分別指向兩個不同位置的對象,所以返回false。

2.getTime()用法
表示時間距1970年1月1日午夜之間的毫秒數,返回一個整數值,所以可直接比較。

3.date1-date2
返回兩個日期相差的毫秒數。

4.getMonth()需要注意的地方
從0開始,即0,1,2...對應的分別是一月,二月,三月........。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM