Date 对象是 JavaScript 语言中内置的数据类型,用于提供日期和时间的操作接口。Date 对象基于 1970 年 1 月 1 日(世界标准时间)起的毫秒数。
new 操作符时,像一个函数一样调用。它将忽略所有传入的参数,并返回当前日期和时间的一个字符串表示Date();
new 操作符,且不带参数时,将根据当前时间和日期创建一个 Date 对象。new Date();
new Date(value);
Date.parse() 方法。但 parse() 方法返回的是一个数字,而 Date() 函数返回的是一个对象。new Date(dateString);
关于标准的日期时间字符串中前置 0 的处理,也类似于 Date.parse()方法,若有前置 0,则相当于 UTC 时间,若没有,则相当于本地时间。其余情况一般都为本地时间。
Date.UTC() 方法的参数,但 Date.UTC() 方法返回是一个毫秒数,且是 UTC 时间,而 Date() 函数返回是一个对象,且是本地时间。new Date( year, month[, day[, hour [, minutes[, seconds[, milliseconds]]]]]);
⚠️ 注意:需要注意的是只能通过调用 Date 构造函数来实例化日期对象:以常规函数调用它(即不加 new 操作符)将会返回一个字符串,而不是一个日期对象。另外,不像其他 JavaScript 类型,Date 对象没有字面量格式。
⚠️ 注意:当 Date 作为构造函数调用并传入多个参数时,如果数值大于合理范围时(如月份为 13 或者分钟数为 70),相邻的数值会被调整。比如 new Date(2013, 13, 1) 等于 new Date(2014, 1, 1),它们都表示日期 2014-02-01(注意月份是从 0 开始的)。其他数值也是类似,new Date(2013, 2, 1, 0, 70) 等于 new Date(2013, 2, 1, 1, 10),都表示时间 2013-03-01T01:10:00。
| 参数 | 描述 | 类型 |
|---|---|---|
| value | 代表自 1970 年 1 月 1 日 00:00:00(世界标准时间)起经过的毫秒数。 | string |
| dateString | 表示日期的字符串值。该字符串应该能被 Date.parse() 方法识别 | string |
| year | 代表年份的整数值。为了避免 2000 年问题最好指定 4 位数的年份; 使用 1998, 而不要用 98。 | number |
| month | 代表月份的整数值从 0(1 月)到 11(12 月)。 | number |
| day | 代表一个月中的第几天的整数值,从 1 开始。 | number |
| hour | 代表一天中的小时数的整数值(24 小时制)。 | number |
| minute | 分钟数。 | number |
| second | 秒数。 | number |
| millisecond | 表示时间的毫秒部分的整数值。 | number |
UTC,也就是我们所说的格林威治时间,指的是 time 中的世界时间标准。而当地时间则是指执行 JavaScript 的客户端电脑所设置的时间。
| 属性 | 描述 |
|---|---|
Date.prototype | 表示 Date 构造函数的原型,允许为 Date 实例对象添加属性方法。 |
Date.length | 值是 7,为该构造函数可接受的参数个数。 |
| 方法 | 描述 |
|---|---|
Date.now() | 返回自 1970 年 1 月 1 日 00:00:00 UTC (世界标准时间)到当前时间的毫秒数。 |
Date.parse() | 解析一个表示某个日期的字符串,并返回从 1970-1-1 00:00:00 UTC 到该日期对象(该日期对象的 UTC 时间)的毫秒数,如果该字符串无法识别,或者一些情况下,包含了不合法的日期数值(如:2015-02-31),则返回值为 NaN。 |
Date.UTC() | 接受的参数同日期构造函数接受最多参数时一样,返回从 1970-1-1 00:00:00 UTC 到指定日期的毫秒数。 |
Date 对象没有可以直接读写的属性,所有对日期和时间的访问都需要通过方法。
Date 对象的大多数方法分为两种形式:
Conversion getter 类方法从 Date 对象返回一个字符串,表示指定的时间
| 方法 | 释义 |
|---|---|
Date.prototype.toString() | 返回本地时区的日期字符串。 |
Date.prototype.toUTCString() | 返回 UTC 时间的日期字符串。 |
Date.prototype.toISOString() | 返回 Date 对象的标准的日期时间字符串格式的字符串。 |
Date.prototype.toDateString() | 返回 Date 对象的日期部分的字符串。 |
Date.prototype.toTimeString() | 返回 Date 对象的时间部分的字符串。 |
Date.prototype.toJSON() | 返回一个符合 JSON 格式的日期字符串,与 toISOString 方法的返回结果完全相同。 |
Date.prototype.toLocaleString() | Date.prototype.toString() 方法的本地化转换。 |
Date.prototype.toLocaleTimeString() | Date.prototype.toTimeString() 方法的本地化转换。 |
Date.prototype.toLocaleDateString() | Date.prototype.toDateString() 方法的本地化转换。 |
Date.prototype.valueOf() | 返回距离 1970 年 1 月 1 日 0 点的毫秒数。 |
Date 对象提供了一系列 Getter 类方法,用来获取实例对象某个方面的值。
| 方法 | 说明 |
|---|---|
Date.prototype.getTime() | 返回距离 1970 年 1 月 1 日 0 点的毫秒数,同 valueOf()。 |
Date.prototype.getTimezoneOffset() | 返回当前时间与 UTC 的时区差异,以分钟表示(8*60=480 分钟),返回结果考虑到了夏令时因素。 |
Date.prototype.get[UTC]FullYear() | 返回指定日期对象的年份(四位数年份时返回四位数字)。 |
Date.prototype.get[UTC]Month() | 返回指定日期对象的月份(0-11)。 |
Date.prototype.get[UTC]Date() | 返回指定日期对象的月份中的第几天(1-31)。 |
Date.prototype.get[UTC]Day() | 返回指定日期对象的星期中的第几天(0-6)。 |
Date.prototype.get[UTC]Hours() | 返回指定日期对象的小时(0-23)。 |
Date.prototype.get[UTC]Minutes() | 返回指定日期对象的分钟(0-59)。 |
Date.prototype.get[UTC]Seconds() | 返回指定日期对象的秒数(0-59)。 |
Date.prototype.get[UTC]Milliseconds() | 返回指定日期对象的微秒数(0-999)。 |
⚠️ 注意:以上方法中含 UTC 则为以世界时间为标准。
Date 对象提供了一系列 Setter 类方法,用来设置实例对象的各个方面。
Setter 方法基本与 Getter 方法相对应,Setter 方法传入类似于 Date.UTC() 的参数,返回调整后的日期的内部毫秒数。
| 方法 | 描述 |
|---|---|
Date.prototype.setTime() | 通过指定从 1970-1-1 00:00:00 UTC 开始经过的毫秒数来设置日期对象的时间,对于早于 1970-1-1 00:00:00 UTC 的时间可使用负值。 |
Date.prototype.setYear() | 用于设置年份。请使用 Date.prototype.set[UTC]FullYear() 方法代替。 |
Date.prototype.set[UTC]FullYear() | 根据本地时间为指定日期对象设置完整年份(四位数年份是四个数字)。 |
Date.prototype.set[UTC]Month() | 根据本地时间为指定日期对象设置月份。 |
Date.prototype.set[UTC]Date() | 根据世界时设置 Date 对象中月份的一天 (1 ~ 31)。 |
Date.prototype.set[UTC]Hours() | 根据本地时间为指定日期对象设置小时数。 |
Date.prototype.set[UTC]Minutes() | 根据本地时间为指定日期对象设置分钟数。 |
Date.prototype.set[UTC]Seconds() | 根据本地时间为指定日期对象设置秒数。 |
Date.prototype.set[UTC]Milliseconds() | 根据本地时间为指定日期对象设置毫秒数。 |
⚠️ 注意:星期只能获取,不能设置。
Date();// "Mon Apr 02 2018 15:00:00 GMT+0800 (中国标准时间)"Date('2018/4/2');// "Mon Apr 02 2018 15:00:00 GMT+0800 (中国标准时间)"typeof Date();// 'string'
new Date();// Mon Apr 02 2018 15:00:00 GMT+0800 (中国标准时间)new Date();// Mon Apr 02 2018 15:00:00 GMT+0800 (中国标准时间)typeof new Date();// 'object'
new Date(0);// Thu Jan 01 1970 08:00:00 GMT+0800 (中国标准时间)new Date(86400000);// Fri Jan 02 1970 08:00:00 GMT+0800 (中国标准时间)typeof new Date(0);// "object"
new Date('4/2/2018');// Mon Apr 02 2018 00:00:00 GMT+0800 (中国标准时间)Date.parse('4/2/2018');// 1522598400000typeof new Date(4 / 2 / 2018);// "object"typeof Date.parse(4 / 2 / 2018);// "number"
关于标准的日期时间字符串中前置 0 的处理,也类似于 Date.parse() 方法,若有前置 0,则相当于 UTC 时间,若没有,则相当于本地时间。其余情况一般都为本地时间。
new Date('04/02/2018');// Mon Apr 02 2018 00:00:00 GMT+0800 (中国标准时间)new Date('2018-4-2');// Mon Apr 02 2018 00:00:00 GMT+0800 (中国标准时间)new Date('2018-04-02');// Mon Apr 02 2018 00:00:00 GMT+0800 (中国标准时间)
new Date(2016, 7, 12);// Fri Aug 12 2016 00:00:00 GMT+0800 (中国标准时间)+new Date(2016, 7, 12);// 1470931200000typeof new Date(2016, 7, 12);// "object"Date.UTC(2016, 7, 12);// 1470960000000typeof Date.UTC(2016, 7, 12);// "number"
Date.parse() 函数的方法时,如果日期对象超出范围,浏览器会自动将日期计算成范围内的值。Date.UTC() 函数的方法时,如果日期对象超出范围,浏览器会提示 Invalid Date。new Date(2018, 7, 32);// Sat Sep 01 2018 00:00:00 GMT+0800 (中国标准时间)new Date(2018, 8, 1);// Sat Sep 01 2018 00:00:00 GMT+0800 (中国标准时间)new Date('2018-8-32');// Invalid Datenew Date('2018-9-1');// Sat Sep 01 2018 00:00:00 GMT+0800 (中国标准时间)
将秒数转为时分秒 HH:mm:ss