Date的实例对象,有几十个自己的方法,分为以下三类。
- to类:从Date对象返回一个字符串,表示指定的时间。
- get类:获取Date对象的日期和时间。
- set类:设置Date对象的日期和时间。
to类方法
(1)Date.prototype.toString()
toString方法返回一个完整的日期字符串。例如:
var d = new Date(2013, 0, 1); d.toString() // "Tue Jan 01 2013 00:00:00 GMT+0800 (CST)" d // "Tue Jan 01 2013 00:00:00 GMT+0800 (CST)"
因为toString是默认的调用方法,如果直接读取Date对象实例,就相当于调用这个方法。
(2)Date.prototype.toUTCString()
toUTCString方法返回对应的UTC时间,也就是比北京时间晚8个小时。例如:
var d = new Date(2013, 0, 1); d.toUTCString() // "Mon, 31 Dec 2012 16:00:00 GMT" d.toString() // "Tue Jan 01 2013 00:00:00 GMT+0800 (CST)"
(3)Date.prototype.toISOString()
toISOString方法返回对应时间的ISO8601写法。例如:
var d = new Date(2013, 0, 1); d.toString() // "Tue Jan 01 2013 00:00:00 GMT+0800 (CST)" d.toISOString() // "2012-12-31T16:00:00.000Z"
注意,toISOString方法返回的总是UTC时区的时间。
(4)Date.prototype.toJSON()
toJSON方法返回一个符合JSON格式的ISO格式的日期字符串,与toISOString方法的返回结果完全相同。例如:
var d = new Date(2013, 0, 1); d.toJSON() // "2012-12-31T16:00:00.000Z" d.toISOString() // "2012-12-31T16:00:00.000Z"
(5)Date.prototype.toDateString()
toDateString方法返回日期字符串。例如:
var d = new Date(2013, 0, 1); d.toDateString() // "Tue Jan 01 2013"
(6)Date.prototype.toTimeString()
toTimeString方法返回时间字符串。例如:
var d = new Date(2013, 0, 1); d.toTimeString() // "00:00:00 GMT+0800 (CST)"
(7)Date.prototype.toLocaleDateString()
toLocaleDateString方法返回一个字符串,代表日期的当地写法。例如:
var d = new Date(2013, 0, 1); d.toLocaleDateString() // 中文版浏览器为"2013年1月1日" // 英文版浏览器为"1/1/2013"
(8)Date.prototype.toLocaleTimeString()
toLocaleTimeString方法返回一个字符串,代表时间的当地写法。例如:
var d = new Date(2013, 0, 1); d.toLocaleTimeString() // 中文版浏览器为"上午12:00:00" // 英文版浏览器为"12:00:00 AM"
get类方法
Date对象提供了一系列get*方法,用来获取实例对象某个方面的值。
- getTime():返回距离1970年1月1日00:00:00的毫秒数,等同于valueOf方法。
- getDate():返回实例对象对应每个月的几号(从1开始)。
- getDay():返回星期几,星期日为0,星期一为1,以此类推。
- getYear():返回距离1900的年数。
- getFullYear():返回四位的年份。
- getMonth():返回月份(0表示1月,11表示12月)。
- getHours():返回小时(0-23)。
- getMilliseconds():返回毫秒(0-999)。
- getMinutes():返回分钟(0-59)。
- getSeconds():返回秒(0-59)。
- getTimezoneOffset():返回当前时间与UTC的时区差异,以分钟表示,返回结果考虑到了夏令时因素。
- 所有这些get*方法返回的都是整数,不同方法返回值的范围不一样。简单说明如下:
- 分钟和秒:0 到59
- 小时:0 到 23
- 星期:0(星期天)到 6(星期六)
- 日期:1 到 31
- 月份:0(一月)到 11(十二月)
- 年份:距离1900年的年数
var d = new Date('January 6, 2013'); d.getDate() // 6 d.getMonth() // 0 d.getYear() // 113 d.getFullYear() // 2013 d.getTimezoneOffset() // -480
在上面代码中,最后一行返回-480,即 UTC 时间减去当前时间,单位是分钟。-480表示 UTC 比当前时间少480分钟,即当前时区比 UTC 早8个小时。
【示例】下面是一个例子,计算本年度还剩下多少天。
function leftDays() { var today = new Date(); var endYear = new Date(today.getFullYear(), 11, 31, 23, 59, 59, 999); var msPerDay = 24 * 60 * 60 * 1000; return Math.round((endYear.getTime() - today.getTime()) / msPerDay); }
上面这些get*方法返回的都是当前时区的时间,Date对象还提供了这些方法对应的UTC版本,用来返回UTC时间。
- getUTCDate()
- getUTCFullYear()
- getUTCMonth()
- getUTCDay()
- getUTCHours()
- getUTCMinutes()
- getUTCSeconds()
- getUTCMilliseconds()
var d = new Date('January 6, 2013'); d.getDate() // 6 d.getUTCDate() // 5
在上面代码中,实例对象d表示当前时区(东八时区)的1月6日0点0分0秒,这个时间对于当前时区来说是1月6日,所以getDate方法返回6,对于UTC时区来说是1月5日,所以getUTCDate方法返回5。
set类方法
Date对象提供了一系列set*方法,用来设置实例对象的各个方面。
- setDate(date):设置实例对象对应的每个月的几号(1-31),返回改变后毫秒时间戳。
- setYear(year): 设置距离1900年的年数。
- setFullYear(year [, month, date]):设置四位年份。
- setHours(hour [, min, sec, ms]):设置小时(0-23)。
- setMilliseconds():设置毫秒(0-999)。
- setMinutes(min [, sec, ms]):设置分钟(0-59)。
- setMonth(month [, date]):设置月份(0-11)。
- setSeconds(sec [, ms]):设置秒(0-59)。
- setTime(milliseconds):设置毫秒时间戳。
这些方法基本是跟get*方法一一对应的,但是没有setDay方法,因为星期几是计算出来的,而不是设置的。另外,注意,凡是涉及到设置月份,都是从0开始算的,即0是1月,11是12月。例如:
var d = new Date ('January 6, 2013'); d // Sun Jan 06 2013 00:00:00 GMT+0800 (CST) d.setDate(9) // 1357660800000 d // Wed Jan 09 2013 00:00:00 GMT+0800 (CST)
set*方法的参数都会自动折算。以setDate为例,如果参数超过当月的最大天数,则向下一个月顺延,如果参数是负数,表示从上个月的最后一天开始减去的天数。例如:
var d1 = new Date('January 6, 2013'); d1.setDate(32) // 1359648000000 d1 // Fri Feb 01 2013 00:00:00 GMT+0800 (CST) var d2 = new Date ('January 6, 2013'); d.setDate(-1) // 1356796800000 d // Sun Dec 30 2012 00:00:00 GMT+0800 (CST)
set类方法和get类方法,可以结合使用,得到相对时间。例如:
var d = new Date(); // 将日期向后推1000天 d.setDate( d.getDate() + 1000 ); // 将时间设为6小时后 d.setHours(d.getHours() + 6); // 将年份设为去年 d.setFullYear(d.getFullYear() - 1);set*系列方法除了setTime()和setYear(),都有对应的UTC版本,即设置UTC时区的时间。
- setUTCDate()
- setUTCFullYear()
- setUTCHours()
- setUTCMilliseconds()
- setUTCMinutes()
- setUTCMonth()
- setUTCSeconds()
var d = new Date('January 6, 2013'); d.getUTCHours() // 16 d.setUTCHours(22) // 1357423200000 d // Sun Jan 06 2013 06:00:00 GMT+0800 (CST)
在上面代码中,本地时区(东八时区)的1月6日0点0分,是UTC时区的前一天下午16点。设为UTC时区的22点以后,就变为本地时区的上午6点。
Date.prototype.valueOf()
valueOf方法返回实例对象距离1970年1月1日00:00:00 UTC对应的毫秒数,该方法等同于getTime方法。例如:
var d = new Date(); d.valueOf() // 1362790014817 d.getTime() // 1362790014817
该方法可以用于计算精确时间。
var start = new Date(); doSomething(); var end = new Date(); var elapsed = end.getTime() - start.getTime();