zoukankan      html  css  js  c++  java
  • 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...对应的分别是一月,二月,三月........。

  • 相关阅读:
    ASP.NET中在一般处理程序中使用session的简单介绍
    oracle 11gR2安装图文教程
    ORACEL 创建表空间
    Echarts使用心得总结(二)
    SqlServer 2008无法远程连接到服务器
    浅谈HTTP中Get与Post的区别
    java设计模式-观察者模式学习
    读牛人博客有感
    mysql的with rollup
    java中的枚举enum
  • 原文地址:https://www.cnblogs.com/SheilaSun/p/4380855.html
Copyright © 2011-2022 走看看