Date

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 (世界标准时间) 起经过的毫秒数。

注:由于浏览器的差异,强烈建议不要使用Date构造函数(和等价的Date.parse方法)解析日期字符串。Date构造函数仅支持 RFC 2822格式字符串。对 ISO 8601 格式的支持会有不同,对于只有日期的字符串(例如“1970-01-01”)会被视为UTC,而不是本地时间。

year代表年份的整数值。0到99的整数值,分别映射1900年到1999年的年份值。详情请参见下面的示例。

描述

  • 如果没有输入任何参数,则构造器会依据系统设置的当前时间来创建一个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.now()返回自 1970-1-1 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)。

Setter 方法

Date.prototype.setDate()根据本地时间为指定的日期对象设置月份中的第几天。

Conversion getter 方法

Date.prototype.toDateString()以更易读的形式返回该日期对象日期部分的字符串,形如 “Wed Jul 28 1993”。

例子

创建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 ChromeEdgeFirefoxInternet ExplorerOperaSafari
Basic Support(Yes)(Yes)(Yes)(Yes)1(Yes)(Yes)

FeatureAndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
Basic Support(Yes)(Yes)(Yes)(Yes)(Yes)(Yes)(Yes)