Date 对象

2018-06-16 15:48 更新

Date 对象的概述和抽象操作的定义

 下面的抽象操作函数用来操作时间值(15.9.1.1 定义)。注:任何情况下,如果这些函数之一的任意参数是 NaN,则结果将是 NaN。

时间值和时间范围

 一个 Date 对象包含一个表示特定时间瞬间的毫秒的数字值。这样的数字值叫做 时间值 。一个时间值也可以是 NaN,说明这个 Date 对象不表示特定时间瞬间。

 ECMAScript 中测量的时间是从协调世界时 1970 年 1 月 1 日开始的毫秒数。在时间值中闰秒是被忽略的,假设每天正好有 86,400,000 毫秒。ECMAScript 数字值可表示的所有从–9,007,199,254,740,991 到 9,007,199,254,740,991 的整数;这个范围足以衡量协调世界时 1970 年 1 月 1 日前后约 285,616 年内任何时间瞬间的精确毫秒。

 ECMAScript Date 对象支持的实际时间范围是略小一些的:相对协调世界时 1970 年 1 月 1 日午夜 0 点的精确的–100,000,000 天到 100,000,000 天。这给出了协调世界时 1970 年 1 月 1 日前后 8,640,000,000,000,000 毫秒的范围。

 精确的协调世界时 1970 年 1 月 1 日午夜 0 点用 +0 表示。

天数和天内时间

 一个给定时间值 t 所属的天数是

Day(t) = floor(t / msPerDay)

 其中每天的毫秒数是

msPerDay = 86400000

 余数叫做天内时间

TimeWithinDay(t) = t modulo msPerDay

年数

 ECMAScript 使用一个推算公历系统,来将一个天数映射到一个年数,并确定在那年的月份的日期。在这个系统中,闰年是且仅是(可被 4 整除)且((不可被 100 整除)或(可被 400 整除))的年份。因此,y 年的天的数目定义为

DaysInYear(y) = 365 { 如果 (y 取模 4) ≠ 0 } = 366 { 如果 (y 取模 4) = 0 且 (y 取模 100) ≠ 0 } = 365 { 如果 (y 取模 100) = 0 且 (y 取模 400) ≠ 0 } = 366 { 如果 (y 取模 400) = 0 }

 所有非闰年有 365 天,其中每月的天的数目是常规的。闰年的二月里有个多出来的一天。 y 年第一天的天数是 :

DayFromYear(y) = 365 × (y−1970) + floor((y−1969)/4) − floor((y−1901)/100) + floor((y−1601)/400)

 y 年的起始时间值是:

TimeFromYear(y) = msPerDay × DayFromYear(y)

 一个时间值决定的年数是:

YearFromTime(t) = 满足条件 TimeFromYear(y) ≤ t 的最大整数 y (接近正无穷)

 若时间值在闰年内,闰年函数返回 1,否则返回 0:

InLeapYear(t) = 0 { 如果 DaysInYear(YearFromTime(t)) = 365 } = 1 { 如果 DaysInYear(YearFromTime(t)) = 366 }

月数

 月份是由闭区间 0 到 11 内的一个整数确定。一个时间值 t 到一个月数的映射 MonthFromTime(t) 的定义为:

MonthFromTime(t) = 0 if 0 ≤ DayWithinYear(t) < 31 = 1 if 31 ≤ DayWithinYear (t) < 59+InLeapYear(t) = 2 if 59+InLeapYear(t) ≤ DayWithinYear (t) < 90+InLeapYear(t) = 3 if 90+InLeapYear(t) ≤ DayWithinYear (t) < 120+InLeapYear(t) = 4 if 120+InLeapYear(t) ≤ DayWithinYear (t) < 151+InLeapYear(t) = 5 if 151+InLeapYear(t) ≤ DayWithinYear (t) < 181+InLeapYear(t) = 6 if 181+InLeapYear(t) ≤ DayWithinYear (t) < 212+InLeapYear(t) = 7 if 212+InLeapYear(t) ≤ DayWithinYear (t) < 243+InLeapYear(t) = 8 if 243+InLeapYear(t) ≤ DayWithinYear (t) < 273+InLeapYear(t) = 9 if 273+InLeapYear(t) ≤ DayWithinYear (t) < 304+InLeapYear(t) = 10 if 304+InLeapYear(t) ≤ DayWithinYear (t) < 334+InLeapYear(t) = 11 if 334+InLeapYear(t) ≤ DayWithinYear (t) < 365+InLeapYear(t)

 其中

DayWithinYear(t) = Day(t)−DayFromYear(YearFromTime(t))

 月数值 0 指一月;1 指二月;2 指三月;3 指四月;4 指五月;5 指六月;6 指七月;7 指八月;8 指九月;9 指十月;10 指十一月;11 指十二月。注:MonthFromTime(0) = 0,对应 1970 年 1 月 1 日,星期四。

日期数

 一个日期数用闭区间 1 到 31 内的一个整数标识。从一个时间值 t 到一个日期数的映射 DateFromTime(t) 的定义为:

DateFromTime(t) = DayWithinYear(t)+1 if MonthFromTime(t)=0 = DayWithinYear(t)−30 if MonthFromTime(t)=1 = DayWithinYear(t)−58−InLeapYear(t) if MonthFromTime(t)=2 = DayWithinYear(t)−89−InLeapYear(t) if MonthFromTime(t)=3 = DayWithinYear(t)−119−InLeapYear(t) if MonthFromTime(t)=4 = DayWithinYear(t)−150−InLeapYear(t) if MonthFromTime(t)=5 = DayWithinYear(t)−180−InLeapYear(t) if MonthFromTime(t)=6 = DayWithinYear(t)−211−InLeapYear(t) if MonthFromTime(t)=7 = DayWithinYear(t)−242−InLeapYear(t) if MonthFromTime(t)=8 = DayWithinYear(t)−272−InLeapYear(t) if MonthFromTime(t)=9 = DayWithinYear(t)−303−InLeapYear(t) if MonthFromTime(t)=10 = DayWithinYear(t)−333−InLeapYear(t) if MonthFromTime(t)=11

星期数

 特定时间值 t 对应的星期数的定义为:

WeekDay(t) = (Day(t) + 4) modulo 7

 星期数的值 0 指星期日;1 指星期一;2 指星期二;3 指星期三;4 指星期四;5 指星期五;6 指星期六。注:WeekDay(0) = 4, 对应 1970 年 1 月 01 日 星期四。

本地时区校准

 期望一个 ECMAScript 的实现确定本地时区校准。本地时区校准是一个毫秒为单位的值 LocalTZA,它加上 UTC 代表本地标准时间。LocalTZA 不体现夏令时。LocalTZA 值不随时间改变,但只取决于地理位置。

夏令时校准

 期望一个 ECMAScript 的实现确定夏令时算法。确定夏令时校准的算法 DaylightSavingTA(t),以毫秒为单位,必须只依赖下面四个项目:

 (1) 自本年开始以来的时间

t – TimeFromYear(YearFromTime(t))

 (2) t 是否在闰年内

InLeapYear(t)

 (3) 本年第一天的星期数

WeekDay(TimeFromYear(YearFromTime(t))

 (4) 地理位置。

 The implementation of ECMAScript should not try to determine whether the exact time was subject to daylight saving time, but just whether daylight saving time would have been in effect if the current daylight saving time algorithm had been used at the time. This avoids complications such as taking into account the years that the locale observed daylight saving time year round.

 If the host environment provides functionality for determining daylight saving time, the implementation of ECMAScript is free to map the year in question to an equivalent year (same leap-year-ness and same starting week day for the year) for which the host environment provides daylight saving time information. The only restriction is that all equivalent years should produce the same result.

本地时间

 从协调世界时到本地时间的转换,定义为

LocalTime(t) = t + LocalTZA + DaylightSavingTA(t)

 从本地时间到协调世界时的转换,定义为

UTC(t) = t – LocalTZA – DaylightSavingTA(t – LocalTZA)

 UTC(LocalTime(t)) 不一定总是等于 t。

小时 , 分钟 , 秒 , 毫秒

 以下函数用于分解时间值:

HourFromTime(t) = floor(t / msPerHour) modulo HoursPerDay MinFromTime(t) = floor(t / msPerMinute) modulo MinutesPerHour SecFromTime(t) = floor(t / msPerSecond) modulo SecondsPerMinute msFromTime(t) = t modulo msPerSecond

 其中

HoursPerDay = 24 MinutesPerHour = 60 SecondsPerMinute = 60 msPerSecond = 1000 msPerMinute = 60000 = msPerSecond × SecondsPerMinute msPerHour = 3600000 = msPerMinute × MinutesPerHour

MakeTime (hour, min, sec, ms)

 MakeTime 抽象操作用它的四个参数算出一个毫秒数,参数必须是 ECMAScript 数字值。此抽象操作运行如下:

  1. 如果 hour 不是有限的或 min 不是有限的或 sec 不是有限的或 ms 不是有限的 , 返回 NaN。
  2. 令 h 为 ToInteger(hour).
  3. 令 m 为 ToInteger(min).
  4. 令 s 为 ToInteger(sec).
  5. 令 milli 为 ToInteger(ms).
  6. 令 t 为 h * msPerHour + m * msPerMinute + s * msPerSecond + milli, 执行的四则运算根据 IEEE 754 规则(这就像使用 ECMAScript 运算符 * 和 + 一样)。
  7. 返回 t。

MakeDay (year, month, date)

 MakeDay 抽象操作用它的三个参数算出一个天数,参数必须是 ECMAScript 数字值。此抽象操作运行如下:

  1. 如果 year 不是有限的或 month 不是有限的或 date 不是有限的 , 返回 NaN.
  2. 令 y 为 ToInteger(year).
  3. 令 m 为 ToInteger(month).
  4. 令 dt 为 ToInteger(date).
  5. 令 ym 为 y + floor(m /12).
  6. 令 mn 为 m modulo 12.
  7. 找一个满足 YearFromTime(t) == ym 且 MonthFromTime(t) == mn 且 DateFromTime(t) == 1 的 t 值 ; 但如果这些条件是不可能的(因为有些参数超出了范围), 返回 NaN.
  8. 返回 Day(t) + dt − 1.

MakeDate (day, time)

 MakeDate 抽象操作用它的两个参数算出一个毫秒数,参数必须是 ECMAScript 数字值。此抽象操作运行如下:

  1. 如果 day 不是有限的或 time 不是有限的 , 返回 NaN.
  2. 返回 day × msPerDay + time.

TimeClip (time)

 TimeClip 抽象操作用它的参数算出一个毫秒数,参数必须是 ECMAScript 数字值。此抽象操作运行如下:

  1. 如果 time 不是有限的 , 返回 NaN.
  2. 如果 abs(time) > 8.64 x 1015, 返回 NaN.
  3. 返回 ToInteger(time) 和 ToInteger(time) + (+0) 之一,这依赖于实现 ( 加正一是为了将 −0 转换成 +0)。

 第 3 步的重点是说允许实现自行选择时间值的内部表示形式,如 64 位有符号整数或 64 位浮点数。根据不同的实现,这个内部表示可能区分也可能无法区分 −0 和 +0。

日期时间字符串格式

 ECMAScript 定义了一个基于简化的 ISO 8601 扩展格式的日期时间的字符串互换格式,格式为:YYYY-MM-DDTHH:mm:ss.sssZ

 其中个字段为:

 YYYY 是公历中年的十进制数字。

 - 在字符串中直接以“-” ( 破折号 ) 出现两次。

 MM 是一年中的月份,从 01 ( 一月 ) 到 12 ( 十二月 )。

 DD 是月份中的日期,从 01 到 30。

 T 在字符串中直接以“T”出现,用来表明时间元素的开始。

 HH 是用两个十进制数字表示的,自午夜 0 点以来的小时数。

 : 在字符串中直接以“:” ( 冒号 ) 出现两次。

 mm 是用两个十进制数字表示的,自小时开始以来的分钟数。

 ss 是用两个十进制数字表示的,自分开始以来的秒数。

 . 在字符串中直接以“.” ( 点 ) 出现。

 sss 是用三个十进制数字表示的,自秒开始以来的毫秒数。

 Z 是时区偏移量,由(“Z” ( 指 UTC) 或“+” 或 “-”)和后面跟着的时间表达式 hh:mm 组成。

 这个格式包括只表示日期的形式:

YYYY YYYY-MM YYYY-MM-DD

 这个格式还包括“日期时间”形式,它由上面的只表示日期的形式之一和紧跟在后面的“T”和以下时间形式之一和可选的时区偏移量组成:

THH:mm THH:mm:ss THH:mm:ss.sss

 所有数字必须是 10 进制的。如果缺少 MM 或 DD 字段,用“01”作为它们的值。如果缺少 mm 或 ss 字段,用“00”作为它们的值,对于缺少的 sss 用“000”作为它的值。对于缺少的时区偏移量用“Z”。

 一个格式字符串里有非法值(越界以及语法错误),意味着这个格式字符串不是有效的本节描述格式的实例。

 由于每天的开始和结束都在午夜,俩符号 00:00 和 24:00 可区分这样的可以是同一时间的两个午夜。这意味着两个符号 1995-02-04T24:00 和 1995-02-05T00:00 精准的指向同一时刻。

 不存在用来规范像 CET, EST 这样的民间时区缩写的国际标准。有时相同的缩写甚至使用不同的时区。出于这个原因,ISO 8601 和这里的格式指定数字来表示时区。

扩展的年

 ECMAScript 需要能表示 6 位数年份(扩展的年份)的能力;协调世界时 1970 年 1 月 1 日前后分别约 285,616 年。对于表示 0 年之前或 9999 年之后的年份,ISO 8601 允许对年的表示法进行扩展,但只能在发送和接受信息的双方有事先共同约定的情况下才能扩展。在已经简化的 ECMAScript 的格式中这样扩展的年份表示法有 2 个额外的数字和始终存在的前缀符号 + 或 - 。0 年被认为是正的,因此用 + 符号作为前缀。

 扩展年的示例

-283457-03-21T15:00:59.008Z 283458 B.C. -000001-01-01T00:00:00Z 2 B.C. +000000-01-01T00:00:00Z 1 B.C. +000001-01-01T00:00:00Z 1 A.D. +001970-01-01T00:00:00Z 1970 A.D. +002009-12-15T00:00:00Z 2009 A.D. +287396-10-12T08:59:00.992Z 287396 A.D.

作为函数调用 Date 构造器

 当把 Date 作为函数来调用,而不作为构造器,它返回一个表示当前时间(协调世界时)的字符串。

 函数调用 Date(…) 的结果和用相同参数调用表达式 new Date(…) 创建的对象是不同的。

Date ( [ year [, month [, date [, hours [, minutes [, seconds [, ms ] ] ] ] ] ] ] )

 所有参数都是可选的;接受提供的任何参数,但被完全忽略。返回一个仿佛是用表达式 (new Date()).toString() 创建的字符串,这里的 Date 是标准内置构造器,toString 是标准内置方法 Date.prototype.toString。

Date 构造器

 当把 Date 作为 new 表达式的一部分来调用,它是个构造器:它初始化新创建的对象。

new Date (year, month [, date [, hours [, minutes [, seconds [, ms ] ] ] ] ] )

 当用二到七个参数调用 Date 构造器,它用 year, month, 还有 ( 可选的 ) date, hours, minutes, seconds, ms 来计算时间。

 新构造对象的 [[Prototype]] 内部属性设定为原始的时间原型对象,它是 Date.prototype(15.9.4.1) 的初始值。

 新构造对象的 [[Class]] 内部属性设定为 "Date"。

 新构造对象的 [[Extensible]] 内部属性设定为 ture。

 新构造对象的 [[PrimitiveValue]] 内部属性按照以下步骤设定:

  1. 令 y 为 ToNumber(year).
  2. 令 m 为 ToNumber(month).
  3. 如果提供了 date ,则令 dt 为 ToNumber(date); 否则令 dt 为 1.
  4. 如果提供了 hours ,则令 h 为 ToNumber(hours); 否则令 h 为 0.
  5. 如果提供了 minutes ,则令 min 为 ToNumber(minutes); 否则令 min 为 0.
  6. 如果提供了 seconds ,则令 s 为 ToNumber(seconds); 否则令 s 为 0.
  7. 如果提供了 ms ,则令 milli 为 ToNumber(ms); 否则令 milli 为 0.
  8. 如果 y 不是 NaN 且 0 ≤ ToInteger(y) ≤ 99, 则令 yr 为 1900+ToInteger(y); 否则令 yr 为 y.
  9. 令 finalDate 为 MakeDate(MakeDay(yr, m, dt), MakeTime(h, min, s, milli)).
  10. 设定新构造对象的 [[PrimitiveValue]] 内部属性为 TimeClip(UTC(finalDate)).

new Date (value)

 新构造对象的 [[Prototype]] 内部属性设定为原始的时间原型对象,它是 Date.prototype(15.9.4.1) 的初始值。

 新构造对象的 [[Class]] 内部属性设定为 "Date"。

 新构造对象的 [[Extensible]] 内部属性设定为 ture。

 新构造对象的 [[PrimitiveValue]] 内部属性按照以下步骤设定:

  1. 令 v 为 ToPrimitive(value).
  2. 如果 Type(v) 是 String, 则用与 parse 方法 (15.9.4.2) 完全相同的方式将 v 解析为一个日期时间;令 V 为这个日期时间的时间值。
  3. 否则 , 令 V 为 ToNumber(v).
  4. 设定新构造对象的 [[PrimitiveValue]] 内部属性为 TimeClip(V),并返回这个值。

new Date ( )

 新构造对象的 [[Prototype]] 内部属性设定为原始的时间原型对象,它是 Date.prototype(15.9.4.1) 的初始值。

 新构造对象的 [[Class]] 内部属性设定为 "Date"。

 新构造对象的 [[Extensible]] 内部属性设定为 ture。

 新构造对象的 [[PrimitiveValue]] 内部属性设定为表示当前时间的时间值(协调世界时)。

Date 构造器的属性

 Date 构造器的 [[Prototype]] 内部属性的值是函数原型对象 (15.3.4)。

 除了内部属性和 length 属性 ( 值为 7) 之外,Date 构造器还有以下属性:

Date.prototype

 Date.prototype 的初始值是内置的 Date 原型对象 (15.9.5)。

 此属性有特性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。

Date.parse (string)

 parse 函数对它的参数应用 ToString 操作并将结果字符串解释为一个日期和时间;返回一个数字值,是对应这个日期时间的 UTC 时间值。字符串可解释为本地时间,UTC 时间,或某个其他时区的时间,这取决于字符串里的内容。此函数首先尝试根据日期时间字符串格式(15.9.1.15)里的规则来解析字符串的格式。如果字符串不符合这个格式此函数可回退,用任意实现定义的试探方式或日期格式。无法识别的字符串或日期时间包含非法元素值,将导致 Date.parse 返回 NaN。

 在所有属性都指向它们的初始值的情况下,如果 x 是一个在特定 ECMAScript 的实现里的毫秒数为零的任意 Date 对象,则在这个实现中以下所有表达式应产生相同数字值:

x.valueOf() Date.parse(x.toString()) Date.parse(x.toUTCString()) Date.parse(x.toISOString())

 然而,表达式

Date.parse( x.toLocaleString())

 是不需要产生与前面三个表达参数相同的数字值。通常,在给定的字符串不符合日期时间字符串格式(15.9.1.15)时,Date.parse 的产生值是依赖于实现,并且在同一实现中 toString 或 toUTCString 方法不能产生不符合日期时间字符串格式的字符串。

Date.UTC (year, month [, date [, hours [, minutes [, seconds [, ms ] ] ] ] ])

 当用少于两个的参数调用 UTC 函数时,它的行为是依赖于实现的。当用二到七个参数调用 UTC 函数,它从 year, month 和 ( 可选的 ) date, hours, minutes, seconds, ms 计算出日期时间。采用以下步骤:

  1. 令 y 为 ToNumber(year).
  2. 令 m 为 ToNumber(month).
  3. 如果提供了 date ,则令 dt 为 ToNumber(date); 否则令 dt 为 1.
  4. 如果提供了 hours ,则令 h 为 ToNumber(hours); 否则令 h 为 0.
  5. 如果提供了 minutes ,则令 min 为 ToNumber(minutes); 否则令 min 为 0.
  6. 如果提供了 seconds ,则令 s 为 ToNumber(seconds); 否则令 s 为 0.
  7. 如果提供了 ms ,则令 milli 为 ToNumber(ms); 否则令 milli 为 0.
  8. 如果 y 不是 NaN 且 0 ≤ ToInteger(y) ≤ 99, 则令 yr 为 1900+ToInteger(y); 否则令 yr 为 y.
  9. 返回 TimeClip(MakeDate(MakeDay(yr, m, dt), MakeTime(h, min, s, milli))).

 UTC 函数的 length 属性是 7。

 UTC 函数与 Date 构造器的不同点有:它返回一个时间值,而不是创建 Date 对象,还有它将参数解释为 UTC,而不是本地时间。

Date.now ( )

 now 函数返回一个数字值,它表示调用 now 时的 UTC 日期时间的时间值。

Date 原型对象的属性

 Date 原型对象自身是一个 Date 对象(其 [[Class]] 是 "Date"),其 [[PrimitiveValue]] 是 NaN。

 Date 原型对象的 [[Prototype]] 内部属性的值是标准内置 Object 原型对象 (15.2.4)。

 在以下对 Date 原型对象的函数属性的描述中,短语“this Date 对象”指调用函数时的 this 值对象。除非另外说明,这些函数不是通用的;如果 this 值不是 [[Class]] 内部属性为 "Date" 的对象,则抛出一个 TypeError 异常。短语“this 时间值”指代表 this Date 对象的时间值的数字值,它是 this Date 对象的 [[PrimitiveValue]] 内部属性的值。

Date.prototype.constructor

 Date.prototype.constructor 的初始值是内置 Date 构造器。

Date.prototype.toString ( )

 此函数返回一个字符串值。字符串中内容是依赖于实现的,但目的是用一种方便,人类可读的形式表示当前时区的时间。

 对毫秒数为零的任意 Date 值 d,Date.parse(d.toString()) 和 d.valueOf() 的结果相同。见 15.9.4.2

Date.prototype.toDateString ( )

 此函数返回一个字符串值。字符串中内容是依赖于实现的,但目的是用一种方便,人类可读的形式表示当前时区时间的“日期”部分。

Date.prototype.toTimeString ( )

 此函数返回一个字符串值。字符串中内容是依赖于实现的,但目的是用一种方便,人类可读的形式表示当前时区时间的“时间”部分。

Date.prototype.toLocaleString ( )

 此函数返回一个字符串值。字符串中内容是依赖于实现的,但目的是用一种 -- 对应宿主环境的当前语言环境设定的 -- 方便,人类可读的形式表示当前时区的时间。

 这个函数的第一个参数可能会在此标准的未来版本中使用到;因此建议实现不要以任何目的使用这个位置参数。

Date.prototype.toLocaleDateString ( )

 此函数返回一个字符串值。字符串中内容是依赖于实现的,但目的是用一种 -- 对应宿主环境的当前语言环境设定的 -- 方便,人类可读的形式表示当前时区时间的“日期”部分。

 这个函数的第一个参数可能会在此标准的未来版本中使用到;因此建议实现不要以任何目的使用这个位置参数。

Date.prototype.toLocaleTimeString ( )

 此函数返回一个字符串值。字符串中内容是依赖于实现的,但目的是用一种 -- 对应宿主环境的当前语言环境设定的 -- 方便,人类可读的形式表示当前时区时间的“时间”部分。

 这个函数的第一个参数可能会在此标准的未来版本中使用到;因此建议实现不要以任何目的使用这个位置参数。

Date.prototype.valueOf ( )

 valueOf 函数返回一个数字值,它是 this 时间值。

Date.prototype.getTime ( )

  1. 返回 this 时间值。

Date.prototype.getFullYear ( )

  1. 令 t 为 this 时间值 .
  2. 如果 t 是 NaN, 返回 NaN.
  3. 返回 YearFromTime(LocalTime(t)).

Date.prototype.getUTCFullYear ( )

  1. 令 t 为 this 时间值 .
  2. 如果 t 是 NaN, 返回 NaN.
  3. 返回 YearFromTime(t).

Date.prototype.getMonth ( )

  1. 令 t 为 this 时间值 .
  2. 如果 t 是 NaN, 返回 NaN.
  3. 返回 MonthFromTime(LocalTime(t)).

Date.prototype.getUTCMonth ( )

  1. 令 t 为 this 时间值 .
  2. 如果 t 是 NaN, 返回 NaN.
  3. 返回 MonthFromTime(t).

Date.prototype.getDate ( )

  1. 令 t 为 this 时间值 .
  2. 如果 t 是 NaN, 返回 NaN.
  3. 返回 DateFromTime(LocalTime(t)).

Date.prototype.getUTCDate ( )

  1. 令 t 为 this 时间值 .
  2. 如果 t 是 NaN, 返回 NaN.
  3. 返回 DateFromTime(t).

Date.prototype.getDay ( )

  1. 令 t 为 this 时间值 .
  2. 如果 t 是 NaN, 返回 NaN.
  3. 返回 WeekDay(LocalTime(t)).

Date.prototype.getUTCDay ( )

  1. 令 t 为 this 时间值 .
  2. 如果 t 是 NaN, 返回 NaN.
  3. 返回 WeekDay(t).

Date.prototype.getHours ( )

  1. 令 t 为 this 时间值 .
  2. 如果 t 是 NaN, 返回 NaN.
  3. 返回 HourFromTime(LocalTime(t)).

Date.prototype.getUTCHours ( )

  1. 令 t 为 this 时间值 .
  2. 如果 t 是 NaN, 返回 NaN.
  3. 返回 HourFromTime(t).

Date.prototype.getMinutes ( )

  1. 令 t 为 this 时间值 .
  2. 如果 t 是 NaN, 返回 NaN.
  3. 返回 MinFromTime(LocalTime(t)).

Date.prototype.getUTCMinutes ( )

  1. 令 t 为 this 时间值 .
  2. 如果 t 是 NaN, 返回 NaN.
  3. 返回 MinFromTime(t).

Date.prototype.getSeconds ( )

  1. 令 t 为 this 时间值 .
  2. 如果 t 是 NaN, 返回 NaN.
  3. 返回 SecFromTime(LocalTime(t)).

Date.prototype.getUTCSeconds ( )

  1. 令 t 为 this 时间值 .
  2. 如果 t 是 NaN, 返回 NaN.
  3. 返回 SecFromTime(t).

Date.prototype.getMilliseconds ( )

  1. 令 t 为 this 时间值 .
  2. 如果 t 是 NaN, 返回 NaN.
  3. 返回 msFromTime(LocalTime(t)).

Date.prototype.getUTCMilliseconds ( )

  1. 令 t 为 this 时间值 .
  2. 如果 t 是 NaN, 返回 NaN.
  3. 返回 msFromTime(t).

Date.prototype.getTimezoneOffset ( )

 返回本地时间和 UTC 时间之间相差的分钟数。

  1. 令 t 为 this 时间值 .
  2. 如果 t 是 NaN, 返回 NaN.
  3. 返回 (t − LocalTime(t)) / msPerMinute.

Date.prototype.setTime (time)

  1. 令 v 为 TimeClip(ToNumber(time)).
  2. 设定 this Date 对象的 [[PrimitiveValue]] 内部属性为 v.
  3. 返回 v.

Date.prototype.setMilliseconds (ms)

  1. 令 t 为 LocalTime(this 时间值 ) 的结果 .
  2. 令 time 为 MakeTime(HourFromTime(t), MinFromTime(t), SecFromTime(t), ToNumber(ms)).
  3. 令 u 为 TimeClip(UTC(MakeDate(Day(t), time))).
  4. 设定 this Date 对象的 [[PrimitiveValue]] 内部属性为 u.
  5. 返回 u.

Date.prototype.setUTCMilliseconds (ms)

  1. 令 t 为 this 时间值 .
  2. 令 time 为 MakeTime(HourFromTime(t), MinFromTime(t), SecFromTime(t), ToNumber(ms)).
  3. 令 v 为 TimeClip(MakeDate(Day(t), time)).
  4. 设定 this Date 对象的 [[PrimitiveValue]] 内部属性为 v.
  5. 返回 v.

Date.prototype.setSeconds (sec [, ms ] )

 没指定 ms 参数时的行为是,仿佛 ms 被指定为调用 getMilliseconds() 的结果一样。

  1. 令 t 为 LocalTime(this 时间值 ) 的结果 .
  2. 令 s 为 ToNumber(sec).
  3. 如果没指定 ms , 则令 milli 为 msFromTime(t); 否则,令 milli 为 ToNumber(ms).
  4. 令 date 为 MakeDate(Day(t), MakeTime(HourFromTime(t), MinFromTime(t), s, milli)).
  5. 令 u 为 TimeClip(UTC(date)).
  6. 设定 this Date 对象的 [[PrimitiveValue]] 内部属性为 u.
  7. 返回 u.

 setSeconds 方法的 length 属性是 2。

Date.prototype.setUTCSeconds (sec [, ms ] )

 没指定 ms 参数时的行为是,仿佛 ms 被指定为调用 getUTCMilliseconds() 的结果一样。

  1. 令 t 为 this 时间值 .
  2. 令 s 为 ToNumber(sec).
  3. 如果没指定 ms , 则令 milli 为 msFromTime(t); 否则,令 milli 为 ToNumber(ms).
  4. 令 date 为 MakeDate(Day(t), MakeTime(HourFromTime(t), MinFromTime(t), s, milli)).
  5. 令 v 为 TimeClip(date).
  6. 设定 this Date 对象的 [[PrimitiveValue]] 内部属性为 v.
  7. 返回 v.

 setUTCSeconds 方法的 length 属性是 2。

Date.prototype.setMinutes (min [, sec [, ms ] ] )

 没指定 sec 参数时的行为是,仿佛 ms 被指定为调用 getSeconds() 的结果一样。

 没指定 ms 参数时的行为是,仿佛 ms 被指定为调用 getMilliseconds() 的结果一样。

  1. 令 t 为 LocalTime(this 时间值 ) 的结果 .
  2. 令 m 为 ToNumber(min).
  3. 如果没指定 sec , 则令 s 为 SecFromTime(t); 否则 , 令 s 为 ToNumber(sec).
  4. 如果没指定 ms , 则令 milli 为 msFromTime(t); 否则 , 令 milli 为 ToNumber(ms).
  5. 令 date 为 MakeDate(Day(t), MakeTime(HourFromTime(t), m, s, milli)).
  6. 令 u 为 TimeClip(UTC(date)).
  7. 设定 this Date 对象的 [[PrimitiveValue]] 内部属性为 u.
  8. 返回 u.

 setMinutes 方法的 length 属性是 3。

Date.prototype.setUTCMinutes (min [, sec [, ms ] ] )

 没指定 sec 参数时的行为是,仿佛 ms 被指定为调用 getUTCSeconds() 的结果一样。

 没指定 ms 参数时的行为是,仿佛 ms 被指定为调用 getUTCMilliseconds() 的结果一样。

  1. 令 t 为 this 时间值 .
  2. 令 m 为 ToNumber(min).
  3. 如果没指定 sec , 则令 s 为 SecFromTime(t); 否则 , 令 s 为 ToNumber(sec).
  4. 如果没指定 ms , 则令 milli 为 msFromTime(t); 否则 , 令 milli 为 ToNumber(ms).
  5. 令 date 为 MakeDate(Day(t), MakeTime(HourFromTime(t), m, s, milli)).
  6. 令 v 为 TimeClip(date).
  7. 设定 this Date 对象的 [[PrimitiveValue]] 内部属性为 v.
  8. 返回 v.

 setUTCMinutes 方法的 length 属性是 3。

Date.prototype.setHours (hour [, min [, sec [, ms ] ] ] )

 没指定 min 参数时的行为是,仿佛 min 被指定为调用 getMinutes() 的结果一样。

 没指定 sec 参数时的行为是,仿佛 ms 被指定为调用 getSeconds() 的结果一样。

 没指定 ms 参数时的行为是,仿佛 ms 被指定为调用 getMilliseconds() 的结果一样。

  1. 令 t 为 LocalTime(this 时间值 ) 的结果 .
  2. 令 h 为 ToNumber(hour).
  3. 如果没指定 min , 则令 m 为 MinFromTime(t); 否则 , 令 m 为 ToNumber(min).
  4. 如果没指定 sec , 则令 s 为 SecFromTime(t); 否则 , 令 s 为 ToNumber(sec).
  5. 如果没指定 ms , 则令 milli 为 msFromTime(t); 否则 , 令 milli 为 ToNumber(ms).
  6. 令 date 为 MakeDate(Day(t), MakeTime(h, m, s, milli)).
  7. 令 u 为 TimeClip(UTC(date)).
  8. 设定 this Date 对象的 [[PrimitiveValue]] 内部属性为 u.
  9. 返回 u.

 setHours 方法的 length 属性是 4。

Date.prototype.setUTCHours (hour [, min [, sec [, ms ] ] ] )

 没指定 min 参数时的行为是,仿佛 min 被指定为调用 getUTCMinutes() 的结果一样。

 没指定 sec 参数时的行为是,仿佛 ms 被指定为调用 getUTCSeconds() 的结果一样。

 没指定 ms 参数时的行为是,仿佛 ms 被指定为调用 getUTCMilliseconds() 的结果一样。

  1. 令 t 为 this 时间值 .
  2. 令 h 为 ToNumber(hour).
  3. 如果没指定 min , 则令 m 为 MinFromTime(t); 否则 , 令 m 为 ToNumber(min).
  4. 如果没指定 sec , 则令 s 为 SecFromTime(t); 否则 , 令 s 为 ToNumber(sec).
  5. 如果没指定 ms , 则令 milli 为 msFromTime(t); 否则 , 令 milli 为 ToNumber(ms).
  6. 令 date 为 MakeDate(Day(t), MakeTime(h, m, s, milli)).
  7. 令 v 为 TimeClip(date).
  8. 设定 this Date 对象的 [[PrimitiveValue]] 内部属性为 v.
  9. 返回 v.

 setUTCHours 方法的 length 属性是 4。

Date.prototype.setDate (date)

  1. 令 t 为 LocalTime(this 时间值 ) 的结果 .
  2. 令 dt 为 ToNumber(date).
  3. 令 newDate 为 MakeDate(MakeDay(YearFromTime(t), MonthFromTime(t), dt), TimeWithinDay(t)).
  4. 令 u 为 TimeClip(UTC(newDate)).
  5. 设定 this Date 对象的 [[PrimitiveValue]] 内部属性为 u.
  6. 返回 u.

Date.prototype.setUTCDate (date)

  1. 令 t 为 this 时间值 .
  2. 令 dt 为 ToNumber(date).
  3. 令 newDate 为 MakeDate(MakeDay(YearFromTime(t), MonthFromTime(t), dt), TimeWithinDay(t)).
  4. 令 v 为 TimeClip(newDate).
  5. 设定 this Date 对象的 [[PrimitiveValue]] 内部属性为 v.
  6. 返回 v.

Date.prototype.setMonth (month [, date ] )

 没指定 date 参数时的行为是,仿佛 ms 被指定为调用 getDate() 的结果一样。

  1. 令 t 为 LocalTime(this 时间值 ) 的结果 .
  2. 令 m 为 ToNumber(month).
  3. 如果没指定 date , 则令 dt 为 DateFromTime(t); 否则 , 令 dt 为 ToNumber(date).
  4. 令 newDate 为 MakeDate(MakeDay(YearFromTime(t), m, dt), TimeWithinDay(t)).
  5. 令 u 为 TimeClip(UTC(newDate)).
  6. 设定 this Date 对象的 [[PrimitiveValue]] 内部属性为 u.
  7. 返回 u.

 setMonth 方法的 length 属性是 2。

Date.prototype.setUTCMonth (month [, date ] )

 没指定 date 参数时的行为是,仿佛 ms 被指定为调用 getUTCDate() 的结果一样。

  1. 令 t 为 this 时间值 .
  2. 令 m 为 ToNumber(month).
  3. 如果没指定 date , 则令 dt 为 DateFromTime(t); 否则 , 令 dt 为 ToNumber(date).
  4. 令 newDate 为 MakeDate(MakeDay(YearFromTime(t), m, dt), TimeWithinDay(t)).
  5. 令 v 为 TimeClip(newDate).
  6. 设定 this Date 对象的 [[PrimitiveValue]] 内部属性为 v.
  7. 返回 v.

 setUTCMonth 方法的 length 属性是 2。

Date.prototype.setFullYear (year [, month [, date ] ] )

 没指定 month 参数时的行为是,仿佛 ms 被指定为调用 getMonth() 的结果一样。

 没指定 date 参数时的行为是,仿佛 ms 被指定为调用 getDate() 的结果一样。

  1. 令 t 为 LocalTime(this 时间值 ) 的结果 ; 但如果 this 时间值是 NaN, 则令 t 为 +0.
  2. 令 y 为 ToNumber(year).
  3. 如果没指定 month , 则令 m 为 MonthFromTime(t); 否则 , 令 m 为 ToNumber(month).
  4. 如果没指定 date , 则令 dt 为 DateFromTime(t); 否则 , 令 dt 为 ToNumber(date).
  5. 令 newDate 为 MakeDate(MakeDay(y, m, dt), TimeWithinDay(t)).
  6. 令 u 为 TimeClip(UTC(newDate)).
  7. 设定 this Date 对象的 [[PrimitiveValue]] 内部属性为 u.
  8. 返回 u.

 setFullYear 方法的 length 属性是 3。

Date.prototype.setUTCFullYear (year [, month [, date ] ] )

 没指定 month 参数时的行为是,仿佛 ms 被指定为调用 getUTCMonth() 的结果一样。

 没指定 date 参数时的行为是,仿佛 ms 被指定为调用 getUTCDate() 的结果一样。

  1. 令 t 为 this 时间值 ; 但如果 this 时间值是 NaN, 则令 t 为 +0.
  2. 令 y 为 ToNumber(year).
  3. 如果没指定 month , 则令 m 为 MonthFromTime(t); 否则 , 令 m 为 ToNumber(month).
  4. 如果没指定 date , 则令 dt 为 DateFromTime(t); 否则 , 令 dt 为 ToNumber(date).
  5. 令 newDate 为 MakeDate(MakeDay(y, m, dt), TimeWithinDay(t)).
  6. 令 v 为 TimeClip(newDate).
  7. 设定 this Date 对象的 [[PrimitiveValue]] 内部属性为 v.
  8. 返回 v.

 setUTCFullYear 方法的 length 属性是 3。

Date.prototype.toUTCString ( )

 此函数返回一个字符串值。字符串中内容是依赖于实现的,但目的是用一种方便,人类可读的形式表示 UTC 时间。

 此函数的目的是为日期时间产生一个比 15.9.1.15 指定的格式更易读的字符串表示。没必要选择明确的或易于机器解析的格式。如果一个实现没有一个首选的人类可读格式,建议使用 15.9.1.15 定义的格式,但用空格而不是“T”分割日期和时间元素。

Date.prototype.toISOString ( )

 此函数返回一个代表 --this Date 对象表示的时间的实例 -- 的字符串。字符串的格式是 15.9.1.15 定义的日期时间字符串格式。字符串中包含所有的字段。字符串表示的时区总是 UTC,用后缀 Z 标记。如果 this 对象的时间值不是有限的数字值,抛出一个 RangeError 异常。

Date.prototype.toJSON ( key )

 此函数为 JSON.stringify (15.12.3) 提供 Date 对象的一个字符串表示。

 当用参数 key 调用 toJSON 方法,采用以下步骤:

  1. 令 O 为 以 this 值为参数调用 toObject 的结果。
  2. 令 tv 为 ToPrimitive(O, hint Number).
  3. 如果 tv 是一个数字值且不是有限的 , 返回 null.
  4. 令 toISO 为以 "toISOString" 为参数调用 O 的 [[Get]] 内部方法的结果。
  5. 如果 IsCallable(toISO) 是 false, 抛出一个 TypeError 异常 .
  6. O 作为以 this 值并用空参数列表调用 toISO 的 [[Call]] 内部方法,返回结果。

 参数是被忽略的。

 toJSON 函数是故意设计成通用的;它不需要其 this 值必须是一个 Date 对象。因此,它可以作为方法转移到其他类型的对象上。但转移到的对象必须有 toISOString 方法。对象可自由使用参数 key 来过滤字符串化的方式。

Date 实例的属性

 Date 实例从 Date 原型对象继承属性,Date 实例的 [[Class]] 内部属性值是 "Date"。Date 实例还有一个 [[PrimitiveValue]] 内部属性。

 [[PrimitiveValue]] 内部属性是代表 this Date 对象的时间值。


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号