IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    原来你是这样的new Date()…

    phpvar发表于 2017-02-21 23:00:11
    love 0

    js中的new Date()可传入日期的字符串参数,也可单独传入年份、月份(从0起记)等数值参数,为什么Date()方法可接收不同的参数格式呢?下面我们来解开这个疑惑!

     

    var now=new Date();

    返回的日期对象形如“Wed Feb 22 2017 00:13:13 GMT+0800 (中国标准时间)”  这样的日期格式。

    如果想根据指定的日期和时间创建日期对象,必须传入表示该日期的毫秒数(从UTC时间1970年1月1日午夜起至该 日期止经过的毫秒数)。为简化这一计算过程,ECMAScript提供了两个方法:Date.parse()和Date.UTC().

    1、当new Date()传入的参数是日期字符串(如:2017-2-22 00:21:50)时,Date构造函数会在后台调用Date.parse(),即:

    new Date("2017-2-22 00:21:50") 和 new Date(Date.parse("2017-2-22 00:21:50")) 是等价的!

     

    2、当new Date()传入的参数是年份、月份等数值参数(如:2017,1,22,00,21,50)时, Date构造函数会在后台调用Date.UTC(),即:

    new Date(2017,1,22,00,21,50) 和 new Date(Date.UTC(2017,1,22,00,21,50)) 是等价的!

     

    3、不管是new Date(Date.parse("2017-2-22 00:21:50")) 还是new Date(Date.UTC(2017,1,22,00,21,50))  都是基于本地时区来创建的,但是Date.parse()方法通常是按当地时区来创建的,而Date.UTC()方法是根据GMT(格林尼治)时间来创建的,验证:

    Date.UTC(2017,1,22,00,21,50)-Date.parse("2017-2-22 00:21:50")  差值刚好是差8个钟!

     

    4、new Date()之后能做什么?

    举例,上代码:

    判断给定日期是星期几,再按当地日期显示格式 组合输出成“ 2月 22 日  星期x ”的格式输出时间

    var now= new Date(2017,2.22);
    now.getDay() // 3 ,即星期三

     

    5、如何判断两个日期是否相等:

    var date1 = new Date("2013-11-29");
    var date2 = new Date("2013-11-29");
    console.log(date1 == date2); //false

    这里返回的却是false是因为date1、date2都是对象,类型为引用类型,所以如果需要比较他们,需要去比较他们的字面量值,而不是单纯的用 == 来比较。

    如果想比较两个date是否相等,可以这么写:

    var date1 = new Date("2013-11-29");
    var date2 = new Date("2013-11-29");
    console.log(date1.getTime() == date2.getTime()); //true

    用getTime()方法,就可以返回日期对应的数值,然后比较就可以了。

    还有一种方法也可以比较日期:

    var date1 = new Date("2013-11-29");
    var date2 = new Date("2013-11-29");
    console.log(date1 - date2 == 0); //true

    这里用date1减去date2,即可以得到它们之间的时间差,如果为0,那么肯定是相等的。



沪ICP备19023445号-2号
友情链接