Date
创建 Date
实例用来处理日期和时间。Date 对象基于1970年1月1日(世界标准时间)起的毫秒数。
语法
new Date();
new Date(value);
new Date(dateString);
new Date(year, month[, date[, hours[, minutes[, seconds[, milliseconds]]]]]);
注: JavaScript Date
对象只能通过调用Date
构造函数来实例化:若以常规函数调用(即不带new
运算符)将返回一个字符串,而不是Date
对象; 与其他 JavaScript 对象类型不同,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。
注:当Date
作为构造函数并调用多个参数时,所定义的参数表示本地时间。如果需要使用 UTC(世界协调时),则使用new Date(Date.UTC(...))
,并取相同的参数。
value
代表自1970年1月1日00:00:00 (世界标准时间) 起经过的毫秒数。
dateString
表示日期的字符串值。该字符串应该能被Date.parse()
方法识别(符合 IETF-compliant RFC 2822 timestamps 或 version of ISO8601)。
注:由于浏览器的差异,强烈建议不要使用Date
构造函数(和等价的Date.parse方法)解析日期字符串。Date
构造函数仅支持 RFC 2822格式字符串。对 ISO 8601 格式的支持会有不同,对于只有日期的字符串(例如“1970-01-01”)会被视为UTC,而不是本地时间。
year
代表年份的整数值。0到99的整数值,分别映射1900年到1999年的年份值。详情请参见下面的示例。
month
表示月份的整数值,整数值取值范围是0到11,取0代表1月份,取11代表12月份。
date
可选参数。代表一个月中的第几天的整数值。
hours
可选参数。代表一天中的小时数的整数值 (24小时制)。
minutes
可选参数。分钟数。
seconds
可选参数。秒数。
milliseconds
可选参数。表示时间的毫秒部分的整数值。
描述
- 如果没有输入任何参数,则构造器会依据系统设置的当前时间来创建一个
Date
对象。
- 如果提供了至少两个参数,其余的参数均会默认设置为1(如果没有提供day参数)或者0。
- JavaScript的时间是由世界标准时间(UTC)1970年1月1日开始,用毫秒计时,一天由86,400,000毫秒组成。Date对象的范围是-100,000,000天至100,000,000天(等效的毫秒值)。
- JavaScript的Date对象为跨平台提供了统一的行为。时间属性可以在不同的系统中表示相同的时刻,而如果使用了本地时间对象,则反映当地的时间。
- JavaScript 的Date对象提供了数个UTC时间的方法,也相应提供了当地时间的方法。UTC,也就是我们所说的格林威治时间(GMT),指的是世界时间标准设置的时间。而当地时间,则是指执行JavaScript的客户端电脑所设置的时间。
- 以一个函数的形式来调用JavaScript的
Date
对象(即指不使用new
操作符)会返回一个代表当前日期和时间的字符串。
属性
Date.prototype
允许为 Date
实例对象添加属性。
Date.length
它的值是 7。这是该构造函数可接受的参数个数。
方法
Date.now()
返回自 1970-1-1 00:00:00 UTC (世界标准时间)至今所经过的毫秒数。
Date.parse()
解析一个表示日期的字符串,并返回从 1970-1-1 00:00:00 所经过的毫秒数。
Date.UTC()
接受和构造函数最长形式的参数相同的参数(从2到7),并返回从 1970-01-01 00:00:00 UTC 开始所经过的毫秒数。
注意:Date.parse
由于浏览器的差异和不一致,强烈建议不要分析字符串。
Date.UTC()
接受和构造函数最长形式的参数相同的参数(从2到7),并返回从 1970-01-01 00:00:00 UTC 开始所经过的毫秒数。
JavaScript Date
实例
所有的 Date
实例都继承自Date.prototype
。修改 Date
构造函数的原型对象会影响到所有的 Date
实例。
Date.prototype 方法
Getter 方法
Date.prototype.getDate()
根据本地时间返回指定日期对象的月份中的第几天(1-31)。
Date.prototype.getDay()
根据本地时间返回指定日期对象的星期中的第几天(0-6)。
Date.prototype.getFullYear()
根据本地时间返回指定日期对象的年份(四位数年份时返回四位数字)。
Date.prototype.getHours()
根据本地时间返回指定日期对象的小时(0-23)。
Date.prototype.getMilliseconds()
根据本地时间返回指定日期对象的微秒(0-999)。
Date.prototype.getMinutes()
根据本地时间返回指定日期对象的分钟(0-59)。
Date.prototype.getMonth()
根据本地时间返回指定日期对象的月份(0-11)。
Date.prototype.getSeconds()
根据本地时间返回指定日期对象的秒数(0-59)。
Date.prototype.getTime()
返回从1970-1-1 00:00:00 UTC(协调世界时)到该日期经过的毫秒数,对于1970-1-1 00:00:00 UTC之前的时间返回负值。
Date.prototype.getTimezoneOffset()
返回当前时区的时区偏移。
Date.prototype.getDate()
根据本地时间返回指定日期对象的月份中的第几天(1-31)。
Date.prototype.getDay()
根据本地时间返回指定日期对象的星期中的第几天(0-6)。
Date.prototype.getFullYear()
根据本地时间返回指定日期对象的年份(四位数年份时返回四位数字)。
Date.prototype.getHours()
根据本地时间返回指定日期对象的小时(0-23)。
Date.prototype.getMilliseconds()
根据本地时间返回指定日期对象的微秒(0-999)。
Date.prototype.getMinutes()
根据本地时间返回指定日期对象的分钟(0-59)。
Date.prototype.getMonth()
根据本地时间返回指定日期对象的月份(0-11)。
Date.prototype.getSeconds()
根据本地时间返回指定日期对象的秒数(0-59)。
Date.prototype.getTime()
返回从1970-1-1 00:00:00 UTC(协调世界时)到该日期经过的毫秒数,对于1970-1-1 00:00:00 UTC之前的时间返回负值。
Date.prototype.getTimezoneOffset()
返回当前时区的时区偏移值。
注:下列基于UTC时间的方法,和上面基于本地时间的方法是相似的
Date.prototype.getUTCDate()
根据UTC时间返回指定日期对象的月份中的第几天(1-31)。
Date.prototype.getUTCDay()
根据UTC时间返回指定日期对象的星期中的第几天(0-6)。
Date.prototype.getUTCFullYear()
根据UTC时间返回指定日期对象的年份(四位数年份时返回四位数字)。
Date.prototype.getUTCHours()
根据UTC时间返回指定日期对象的小时(0-23)。
Date.prototype.getUTCMilliseconds()
根据UTC时间返回指定日期对象的微秒(0-999)。
Date.prototype.getUTCMinutes()
根据UTC时间返回指定日期对象的分钟(0-59)。
Date.prototype.getUTCMonth()
据UTC时间返回指定日期对象的月份(0-11)。
Date.prototype.getUTCSeconds()
根据UTC时间返回指定日期对象的秒数(0-59)。
Date.prototype.getYear()
根据UTC时间返回指定日期对象的年份(通常为2-3位数字)。请使用getFullYear()
替代.
Setter 方法
Date.prototype.setDate()
根据本地时间为指定的日期对象设置月份中的第几天。
Date.prototype.setFullYear()
根据本地时间为指定日期对象设置完整年份(四位数年份是四个数字)。
Date.prototype.setHours()
根据本地时间为指定日期对象设置小时数。
Date.prototype.setMilliseconds()
根据本地时间为指定日期对象设置毫秒数。
Date.prototype.setMinutes()
根据本地时间为指定日期对象设置分钟数。
Date.prototype.setMonth()
根据本地时间为指定日期对象设置月份。
Date.prototype.setSeconds()
根据本地时间为指定日期对象设置秒数。
Date.prototype.setTime()
通过指定从 1970-1-1 00:00:00 UTC 开始经过的毫秒数来设置日期对象的时间,对于早于 1970-1-1 00:00:00 UTC的时间可使用负值。
Date.prototype.setUTCDate()
根据世界时设置 Date 对象中月份的一天 (1 ~ 31)。
Date.prototype.setUTCFullYear()
根据世界时设置 Date 对象中的年份(四位数字)。
Date.prototype.setUTCHours()
根据世界时设置 Date 对象中的小时 (0 ~ 23)。
Date.prototype.setUTCMilliseconds()
根据世界时设置 Date 对象中的毫秒 (0 ~ 999)。
Date.prototype.setUTCMinutes()
根据世界时设置 Date 对象中的分钟 (0 ~ 59)。
Date.prototype.setUTCMonth()
根据世界时设置 Date 对象中的月份 (0 ~ 11)。
Date.prototype.setUTCSeconds()
根据世界时设置 Date 对象中的秒钟 (0 ~ 59)。
Date.prototype.setYear()
setYear() 方法用于设置年份。请使用 setFullYear()
方法代替。
Conversion getter 方法
Date.prototype.toDateString()
以更易读的形式返回该日期对象日期部分的字符串,形如 “Wed Jul 28 1993”。
Date.prototype.toISOString()
把一个日期转换为符合 ISO 8601 扩展格式的字符串。该方法将会返回一个 ISO(ISO 8601 Extended Format)格式的字符串: YYYY-MM-DDTHH:mm:ss.sssZ。时区总是UTC(协调世界时),加一个后缀“Z”标识。
Date.prototype.toJSON()
使用toISOString()
返回一个表示该日期的字符串。目的是为了能在JSON.stringify()
方法中使用。
Date.prototype.toGMTString()
返回一个基于 GMT (UT) 时区的字符串来表示该日期。请使用toUTCString()
方法代替。
Date.prototype.toLocaleDateString()
返回一个表示该日期对象日期部分的字符串,该字符串格式与系统设置的地区关联(locality sensitive)。
Date.prototype.toLocaleFormat()
使用格式字符串将日期转换为字符串。
Date.prototype.toLocaleString()
返回一个表示该日期对象的字符串,该字符串与系统设置的地区关联(locality sensitive)。重写了Object.prototype.toLocaleString()
方法。
Date.prototype.toLocaleTimeString()
返回一个表示该日期对象时间部分的字符串,该字符串格式与系统设置的地区关联(locality sensitive)。
Date.prototype.toSource()
返回一个与Date
等价的原始字符串对象,你可以使用这个值去生成一个新的对象。重写了 Object.prototype.toSource()
这个方法。
Date.prototype.toString()
返回一个表示该日期对象的字符串。重写了Object.prototype.toString()
方法。
Date.prototype.toTimeString()
以更易读格式返回日期对象时间部分的字符串, 形如 “14:39:07 GMT-0600 (PDT)”
Date.prototype.toUTCString()
把一个日期对象转换为一个以UTC时区计时的字符串。
Date.prototype.valueOf()
返回一个日期对象的原始值。重写了Object.prototype.valueOf()
方法。
例子
创建Date
对象的几种方法
以下示例显示了创建JavaScript日期对象的几种方法:
注意:由于浏览器的差异和不一致,强烈建议不要使用Date
构造函数(和等价的Date.parse
方法)解析日期字符串。
var today = new Date();
var birthday = new Date('December 17, 1995 03:24:00');
var birthday = new Date('1995-12-17T03:24:00');
var birthday = new Date(1995, 11, 17);
var birthday = new Date(1995, 11, 17, 3, 24, 0);
0-99的两位数年份 映射到 1900 - 1999年份
应当使用Date.prototype.setFullYear()
和Date.prototype.getFullYear()
方法,来创建和获得 0 到 99 两位数年份之间的日期。
var date = new Date(98, 1); // Sun Feb 01 1998 00:00:00 GMT+0000 (GMT)
//已弃用的方法, 98 也映射到 1998年
date.setYear(98); // Sun Feb 01 1998 00:00:00 GMT+0000 (GMT)
date.setFullYear(98); // Sat Feb 01 0098 00:00:00 GMT+0000 (BST)
计算时间差
以下示例显示如何确定两个JavaScript日期之间经过的时间差(以毫秒为单位)。
由于年、月、日(夏令时转换)的不同日期长度,使用大于小时,分钟和秒的单位来表示时间差,可能会需要额外处理一些问题,在尝试之前应该进行彻底的研究。
// using Date objects
var start = Date.now();
// the event to time goes here:
doSomethingForALongTime();
var end = Date.now();
var elapsed = end - start; // elapsed time in milliseconds
// using built-in methods
var start = new Date();
// the event to time goes here:
doSomethingForALongTime();
var end = new Date();
var elapsed = end.getTime() - start.getTime(); // elapsed time in milliseconds
// to test a function and get back its return
function printElapsedTime(fTest) {
var nStartTime = Date.now(),
vReturn = fTest(),
nEndTime = Date.now();
console.log('Elapsed time: ' + String(nEndTime - nStartTime) + ' milliseconds');
return vReturn;
}
yourFunctionReturn = printElapsedTime(yourFunction);
注:在支持Web Performance API的高分辨率时间功能的浏览器中,Performance.now()
可以提供比Date.now()更可靠和精确的测量时间。
规范
规范版本 | 状态 | 评论 |
---|---|---|
ECMAScript最新草案(ECMA-262)该规范中“日期”的定义。 | 最新标准 | |
ECMAScript 2015(第6版,ECMA-262)该规范中“日期”的定义。 | 标准 | |
ECMAScript 5.1(ECMA-262)该规范中“日期”的定义。 | 标准 | |
ECMAScript第一版(ECMA-262) | 标准 | 初始定义 在JavaScript 1.1中实现。 |
浏览器兼容性
Feature | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
Basic Support | (Yes) | (Yes) | (Yes) | (Yes)1 | (Yes) | (Yes) |
Feature | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
---|---|---|---|---|---|---|---|
Basic Support | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |
本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com