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,那么肯定是相等的。
5条评论( 网友:4 条,站长:1 条 ) 网友评论{有您的评论更精彩....}