Date实例方法

课后整理 2020-12-20

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*方法,用来获取实例对象某个方面的值。

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时间。

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*方法,用来设置实例对象的各个方面。

这些方法基本是跟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时区的时间。

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();