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 使用一個推算公歷系統(tǒng),來將一個天數映射到一個年數,并確定在那年的月份的日期。在這個系統(tǒng)中,閏年是且僅是(可被 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 天,其中每月的天的數目是常規(guī)的。閏年的二月里有個多出來的一天。 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 }

月數

 月份是由閉區(qū)間 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 日,星期四。

日期數

 一個日期數用閉區(qū)間 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 日 星期四。

本地時區(qū)校準

 期望一個 ECMAScript 的實現確定本地時區(qū)校準。本地時區(qū)校準是一個毫秒為單位的值 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, 執(zhí)行的四則運算根據 IEEE 754 規(guī)則(這就像使用 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 位浮點數。根據不同的實現,這個內部表示可能區(qū)分也可能無法區(qū)分 ?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 是時區(qū)偏移量,由(“Z” ( 指 UTC) 或“+” 或 “-”)和后面跟著的時間表達式 hh:mm 組成。

 這個格式包括只表示日期的形式:

YYYY YYYY-MM YYYY-MM-DD

 這個格式還包括“日期時間”形式,它由上面的只表示日期的形式之一和緊跟在后面的“T”和以下時間形式之一和可選的時區(qū)偏移量組成:

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

 所有數字必須是 10 進制的。如果缺少 MM 或 DD 字段,用“01”作為它們的值。如果缺少 mm 或 ss 字段,用“00”作為它們的值,對于缺少的 sss 用“000”作為它的值。對于缺少的時區(qū)偏移量用“Z”。

 一個格式字符串里有非法值(越界以及語法錯誤),意味著這個格式字符串不是有效的本節(jié)描述格式的實例。

 由于每天的開始和結束都在午夜,倆符號 00:00 和 24:00 可區(qū)分這樣的可以是同一時間的兩個午夜。這意味著兩個符號 1995-02-04T24:00 和 1995-02-05T00:00 精準的指向同一時刻。

 不存在用來規(guī)范像 CET, EST 這樣的民間時區(qū)縮寫的國際標準。有時相同的縮寫甚至使用不同的時區(qū)。出于這個原因,ISO 8601 和這里的格式指定數字來表示時區(qū)。

擴展的年

 ECMAScript 需要能表示 6 位數年份(擴展的年份)的能力;協調世界時 1970 年 1 月 1 日前后分別約 285,616 年。對于表示 0 年之前或 9999 年之后的年份,ISO 8601 允許對年的表示法進行擴展,但只能在發(fā)送和接受信息的雙方有事先共同約定的情況下才能擴展。在已經簡化的 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(…) 創(chuàng)建的對象是不同的。

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

 所有參數都是可選的;接受提供的任何參數,但被完全忽略。返回一個仿佛是用表達式 (new Date()).toString() 創(chuàng)建的字符串,這里的 Date 是標準內置構造器,toString 是標準內置方法 Date.prototype.toString。

Date 構造器

 當把 Date 作為 new 表達式的一部分來調用,它是個構造器:它初始化新創(chuàng)建的對象。

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 時間,或某個其他時區(qū)的時間,這取決于字符串里的內容。此函數首先嘗試根據日期時間字符串格式(15.9.1.15)里的規(guī)則來解析字符串的格式。如果字符串不符合這個格式此函數可回退,用任意實現定義的試探方式或日期格式。無法識別的字符串或日期時間包含非法元素值,將導致 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 構造器的不同點有:它返回一個時間值,而不是創(chuàng)建 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 ( )

 此函數返回一個字符串值。字符串中內容是依賴于實現的,但目的是用一種方便,人類可讀的形式表示當前時區(qū)的時間。

 對毫秒數為零的任意 Date 值 d,Date.parse(d.toString()) 和 d.valueOf() 的結果相同。見 15.9.4.2

Date.prototype.toDateString ( )

 此函數返回一個字符串值。字符串中內容是依賴于實現的,但目的是用一種方便,人類可讀的形式表示當前時區(qū)時間的“日期”部分。

Date.prototype.toTimeString ( )

 此函數返回一個字符串值。字符串中內容是依賴于實現的,但目的是用一種方便,人類可讀的形式表示當前時區(qū)時間的“時間”部分。

Date.prototype.toLocaleString ( )

 此函數返回一個字符串值。字符串中內容是依賴于實現的,但目的是用一種 -- 對應宿主環(huán)境的當前語言環(huán)境設定的 -- 方便,人類可讀的形式表示當前時區(qū)的時間。

 這個函數的第一個參數可能會在此標準的未來版本中使用到;因此建議實現不要以任何目的使用這個位置參數。

Date.prototype.toLocaleDateString ( )

 此函數返回一個字符串值。字符串中內容是依賴于實現的,但目的是用一種 -- 對應宿主環(huán)境的當前語言環(huán)境設定的 -- 方便,人類可讀的形式表示當前時區(qū)時間的“日期”部分。

 這個函數的第一個參數可能會在此標準的未來版本中使用到;因此建議實現不要以任何目的使用這個位置參數。

Date.prototype.toLocaleTimeString ( )

 此函數返回一個字符串值。字符串中內容是依賴于實現的,但目的是用一種 -- 對應宿主環(huán)境的當前語言環(huán)境設定的 -- 方便,人類可讀的形式表示當前時區(qū)時間的“時間”部分。

 這個函數的第一個參數可能會在此標準的未來版本中使用到;因此建議實現不要以任何目的使用這個位置參數。

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 定義的日期時間字符串格式。字符串中包含所有的字段。字符串表示的時區(qū)總是 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

公眾號
微信公眾號

編程獅公眾號