JavaScript之Date对象
一、概述
Date对象是JavaScript提供的日期和时间的操作接口。它有多种方法。
1.1、Date()
作为一个函数 Date() 可以直接调用,它返回当前时间和日期的字符串。
console.log(Date()); //Tue Mar 24 2015 19:06:23 GMT+0800 (中国标准时间) console.log(Date(200,1,1)) //Tue Mar 24 2015 19:06:23 GMT+0800 (中国标准时间)
不管是否传入参数,直接调用只返回当前时间。
1.2、new Date()
Date 对象还是一个构造函数,对它使用new命令,会返回一个Date对象的实例,如果不加参数,生成的就是代表当前时间的对象。
var date = new Date(); console.log(date); //Tue Mar 24 2015 19:12:59 GMT+0800 (中国标准时间) var date = new Date(2000,1,1); console.log(date); //Tue Feb 01 2000 00:00:00 GMT+0800 (中国标准时间)
1.3、new Date( datestring )
Date对象还接受一个日期字符串作为参数,返回所对应的时间。
var date = new Date("2005-03-03"); console.log(date); //Thu Mar 03 2005 08:00:00 GMT+0800 (中国标准时间)
所有可以被Date.parse() 方法解析的日期字符串,都可以当做Date对象的参数
new Date("2013-02-15") new Date("2013-FEB-15") new Date("FEB, 15, 2013") new Date("FEB 15, 2013") new Date("Feberuary, 15, 2013") new Date("Feberuary 15, 2013") new Date("15, Feberuary, 2013") // Fri Feb 15 2013 08:00:00 GMT+0800 (中国标准时间)
上述写法很多,返回的都是同一个时间。
1.4、new Date( year, month[,day,hours,minutes,seconds,ms] )
在多个参数的情况下,Date对象将其分别视作对应的年、月、日、小时、分钟、秒、毫秒。如果采用这个方法,最少需要指定两个参数(年和月),其他参数都可以不指定,默认为 0,如果只使用年一个参数,Date对象会将其解析为毫秒数。
new Date(2013) // Thu Jan 01 1970 08:00:02 GMT+0800 (中国标准时间) new Date(2013,0) // Tue Jan 01 2013 00:00:00 GMT+0800 (中国标准时间) new Date(2013,0,1) // Tue Jan 01 2013 00:00:00 GMT+0800 (中国标准时间) new Date(2013,0,1,0) // Tue Jan 01 2013 00:00:00 GMT+0800 (中国标准时间) new Date(2013,0,1,0,0,0,0) // Tue Jan 01 2013 00:00:00 GMT+0800 (中国标准时间)
上面除了第一行代码,返回的都是同一个时间,可以看到,月份是从0开始的,日是从1开始的。
如果参数超出了正常范围,会被自动折算。比如:月份为 15,就算为下一年的4月。参数还可以使用负数,表示扣去时间。
new Date(2013,0) // Tue Jan 01 2013 00:00:00 GMT+0800 (中国标准时间) new Date(2013,-1) // Sat Dec 01 2012 00:00:00 GMT+0800 (中国标准时间) new Date(2013,0,1) // Tue Jan 01 2013 00:00:00 GMT+0800 (中国标准时间) new Date(2013,0,0) // Mon Dec 31 2012 00:00:00 GMT+0800 (中国标准时间) new Date(2013,0,-1) // Sun Dec 30 2012 00:00:00 GMT+0800 (中国标准时间)
年的情况有所不同,如果为 0,表示1900年;如果为负数,则表示公元前。
new Date(1,0) // Tue Jan 01 1901 00:00:00 GMT+0800 (中国标准时间) new Date(0,0) // Mon Jan 01 1900 00:00:00 GMT+0800 (中国标准时间) new Date(-1,0) // Fri Jan 01 -1 00:00:00 GMT+0800 (中国标准时间)
1.5、日期的运算
类型转换时,Date对象的实例如果转化为数值,则等于对应的毫秒数;如果转化为字符串,则等于对应的日期字符串,所以,两个日期对象进行减法运算,返回的就是他们之间的毫秒数;进行加法运算,返回的就是连接后的两个字符串。
var date1 = new Date(2000,1,1); var date2 = new Date(); console.log(date2-date1); //477862629379 console.log(date1+date2); //Tue Feb 01 2000 00:00:00 GMT+0800 (中国标准时间)Tue Mar 24 2015 19:37:09 GMT+0800 (中国标准时间)
二、Date对象的方法
2.1、Date.now()
now方法返回当前距离1970年1月1日 00:00:00 UTC的毫秒数(Unix时间戳乘以1000)
console.log(Date.now()); //1427197175189
如果需要更精确的时间,可以使用window.performance.now()。它提供页面加载到命令运行时的已经过去的时间,单位是浮点数形式的毫秒。
console.log(window.performance.now()); //13.942999998107553
2.2、Date.parse()
parse方法是用来解析日期字符串,返回距离1970年1月1日00:00:00的毫秒数,日期字符串的格式应该完全或者部分符合RFC2822和ISO8061,即YYYY-MM-DDTHH:mm:ss:sssZ格式,其中最后的Z表示时区,是可选的。
Date.parse("Aug 9, 1995")// 返回807897600000,以下省略返回值 Date.parse("January 26, 2011 13:51:50") Date.parse("Mon, 25 Dec 1995 13:30:00 GMT") Date.parse("Mon, 25 Dec 1995 13:30:00 +0430") Date.parse("2011-10-10") Date.parse("2011-10-10T14:48:00")如果解析失败,返回NaN。
Date.parse("xxx") // NaN
三、Date实例对象的方法
使用new命令生成的Date对象的实例,有很多自己的方法。
3.1、Date.prototype.toString()
toString 方法返回一个完整的时间字符串。
var today = new Date(); console.log(today.toString()); //Tue Mar 24 2015 19:59:11 GMT+0800 (中国标准时间) console.log(today); //Tue Mar 24 2015 19:59:11 GMT+0800 (中国标准时间)
因为 today默认调用的是toString() 方法,所以两者是相同的。
3.2、Date.prototype.toISOString() Date.prototype.toUTCString()
toUTCString方法返回对应的UTC时间,也就是比北京时间晚8个小时。toISOString方法返回对应时间的ISO8601写法。var today = new Date(); console.log(today); //Tue Mar 24 2015 20:06:17 GMT+0800 (中国标准时间) console.log(today.toUTCString());//Tue, 24 Mar 2015 12:06:17 GMT console.log(today.toISOString());//2015-03-24T12:06:17.273Z
3.3、Date.prototype.toDateString() Date.prototype.toTimeString()
toDateString方法返回日期的字符串形式,toTimeString方法返回时间的字符串形式。var today = new Date(); console.log(today.toDateString());//Tue Mar 24 2015 console.log(today.toTimeString());//20:13:03 GMT+0800 (中国标准时间)
3.4、Date.prototype.toLocaleDateString() Date.prototype.toLocaleTimeString()
toLocalDateString方法返回一个字符串,代表日期的当地写法;toLocalTimeString方法返回一个字符串,代表时间的当地写法。
var today = new Date(); console.log(today.toLocaleDateString());// Tue Mar 24 2015 console.log(today.toLocaleTimeString());//20:16:10 GMT+0800 (中国标准时间)
3.5、Date.prototype.valueOf()
valueOf方法返回实例对象距离1970年1月1日00:00:00 UTC对应的毫秒数,该方法等同于getTime方法。
var today = new Date(); console.log(today.valueOf());// 1427199446088 console.log(today.getTime());// 1427199446088
该方法可以用来计算精准的时间
var start = new Date(); //进行一些其他工作 var end = new Date(); var elapsed = end.getTime() - start.getTime();
3.6、Date.prototype.get系列方法
Date对象提供了一系列get方法,用来获取实例对象某个方面的值。Date.prototype.getTime():返回实例对象距离1970年1月1日00:00:00对应的毫秒数,等同于valueOf方法。 Date.prototype.getDate():返回实例对象对应每个月的几号(从1开始)。 Date.prototype.getDay():返回星期,星期日为0,星期一为1,以此类推。 Date.prototype.getFullYear():返回四位的年份。 Date.prototype.getMonth():返回月份(0表示1月,11表示12月)。 Date.prototype.getHours():返回小时(0-23)。 Date.prototype.getMilliseconds():返回毫秒(0-999)。 Date.prototype.getMinutes():返回分钟(0-59)。 Date.prototype.getSeconds():返回秒(0-59)。 上面这些方法默认返回的都是当前时区的时间,Date对象还提供了这些方法对应的UTC版本,用来返回UTC时间,比如getUTCFullYear()、getUTCMonth()、getUTCDay()、getUTCHours()等等。
3.7、Date.prototype.set系列方法
Date对象提供了一系列set方法,用来设置实例对象的各个方面。
Date.prototype.setDate(date):设置实例对象对应的每个月的几号(1-31),返回改变后毫秒时间戳。 Date.prototype.setFullYear(year [, month, date]):设置四位年份。 Date.prototype.setHours(hour [, min, sec, ms]):设置小时(0-23)。 Date.prototype.setMilliseconds():设置毫秒(0-999)。 Date.prototype.setMinutes(min [, sec, ms]):设置分钟(0-59)。 Date.prototype.setMonth(month [, date]):设置月份(0-11)。 Date.prototype.setSeconds(sec [, ms]):设置秒(0-59)。 Date.prototype.setTime(milliseconds):设置毫秒时间戳。set方法的参数都会自动折算。以setDate为例,如果参数超过当月的最大天数,则向下一个月顺延,如果参数是负数,表示从上个月的最后一天开始减去的天数。
var d = new Date("2013-02-06"); d.setDate(32) // 1359648000000 console.log(d); // Fri Feb 01 2013 00:00:00 GMT+0800 (CST) var d = new Date ("2013-02-06"); d.setDate(-1) // 1356796800000 console.log(d); // Sun Dec 30 2012 00:00:00 GMT+0800 (CST)set系列方法除了setTime(),都有对应的UTC版本,比如setUTCHours()。
参看链接:
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。