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...对应的分别是一月,二月,三月........。