JavaScript 的 Date
建構函式有助於剖析、管理和顯示日期。本章說明其運作方式。
日期 API 使用術語 UTC(協調世界時)。對於大多數目的,UTC 是 GMT(格林威治標準時間)的同義詞,大致表示英國倫敦的時區。
有四種呼叫 Date
建構函式的方法:
new Date(year, month, date?, hours?, minutes?, seconds?, milliseconds?)
根據提供的資料建構新的日期。時間相對於目前的時區來詮釋。 Date.UTC()
提供類似的功能,但相對於 UTC。參數的範圍如下
year
:對於 0 ≤ year
≤ 99,會加上 1900。
month
:0–11(0 為 1 月,1 為 2 月,以此類推)
date
: 1–31
hours
: 0–23
minutes
: 0–59
seconds
: 0–59
milliseconds
: 0–999
以下是一些範例
> new Date(2001, 1, 27, 14, 55) Date {Tue Feb 27 2001 14:55:00 GMT+0100 (CET)} > new Date(01, 1, 27, 14, 55) Date {Wed Feb 27 1901 14:55:00 GMT+0100 (CET)}
順帶一提,JavaScript 繼承了 Java 稍嫌奇怪的慣例,將 0 詮釋為 1 月,1 為 2 月,以此類推。
new Date(dateTimeStr)
這是一個日期時間字串,會轉換成數字,然後呼叫 new Date(number)
。 日期時間格式 說明了日期時間格式。例如:
> new Date('2004-08-29') Date {Sun Aug 29 2004 02:00:00 GMT+0200 (CEST)}
不合法日期時間字串會導致 NaN
傳遞給 new Date(number)
。
new Date(timeValue)
根據自 1970 年 1 月 1 日 00:00:00 UTC 以來的毫秒數建立日期。例如
> new Date(0) Date {Thu Jan 01 1970 01:00:00 GMT+0100 (CET)}
這個建構函式的反函式是 getTime()
方法,它會傳回毫秒數
> new Date(123).getTime() 123
您可以使用 NaN
作為引數,它會產生 Date
的特殊執行個體,一個「無效日期」
> var d = new Date(NaN); > d.toString() 'Invalid Date' > d.toJSON() null > d.getTime() NaN > d.getYear() NaN
new Date()
new Date(Date.now())
相同。
建構函式 Date
有 下列方法:
Date.now()
new Date().getTime()
相同的結果。
Date.parse(dateTimeString)
將 dateTimeString
轉換為自 1970 年 1 月 1 日 00:00:00 UTC 以來的毫秒數。 日期時間格式 說明 dateTimeString
的格式。結果可以用來呼叫 new Date(number)
。以下是幾個範例
> Date.parse('1970-01-01') 0 > Date.parse('1970-01-02') 86400000
如果無法剖析字串,此方法會傳回 NaN
> Date.parse('abc') NaN
Date.UTC(year, month, date?, hours?, minutes?, seconds?, milliseconds?)
將 提供的資料轉換為自 1970 年 1 月 1 日 00:00:00 UTC 以來的毫秒數。它與具有相同引數的 Date
建構函式有兩種不同之處:
本節涵蓋 Date.prototype
的方法。
時間單位 取得器和設定器可用於下列簽章:
當地時間
Date.prototype.get«Unit»()
傳回 Unit
,根據當地時間。
Date.prototype.set«Unit»(number)
設定 Unit
,根據當地時間。
世界時間
Date.prototype.getUTC«Unit»()
傳回 Unit
,根據世界時間。
Date.prototype.setUTC«Unit»(number)
設定 Unit
,根據世界時間。
Unit
是下列字詞之一
FullYear
:通常為四位數字
Month
:月份(0–11)
Date
:當月日期(1–31)
Day
(僅限取得器):星期幾(0–6);0 為星期日
Hours
:小時(0–23)
Minutes
:分鐘(0–59)
Seconds
:秒(0–59)
Milliseconds
:毫秒(0–999)
例如
> var d = new Date('1968-11-25'); Date {Mon Nov 25 1968 01:00:00 GMT+0100 (CET)} > d.getDate() 25 > d.getDay() 1
下列方法讓您可以取得和設定自 1970 年 1 月 1 日以來的毫秒數,以及更多:
Date.prototype.getTime()
傳回自 1970 年 1 月 1 日 00:00:00 UTC 以來的毫秒數(請參閱 時間值:自 1970-01-01 以來的日期(以毫秒為單位))。
Date.prototype.setTime(timeValue)
設定日期,如自 1970 年 1 月 1 日 00:00:00 UTC 以來的毫秒數所指定(請參閱 時間值:自 1970-01-01 以來的日期(以毫秒為單位))。
Date.prototype.valueOf()
與 getTime()
相同。當日期轉換為數字時,會呼叫此方法。
Date.prototype.getTimezoneOffset()
傳回當地時間與 UTC 時間的分鐘差。
單位 Year
已棄用,建議使用 FullYear
Date.prototype.getYear()
已棄用,請改用 getFullYear()
。
Date.prototype.setYear(number)
已棄用,請改用 setFullYear()
。
請注意 將日期轉換為字串在不同的實作中會產生很大的差異。以下日期用於計算以下範例中的輸出(在撰寫本書時,Firefox 對此支援最完整):
new
Date
(
2001
,
9
,
30
,
17
,
43
,
7
,
856
);
Date.prototype.toTimeString()
:
17:43:07 GMT+0100 (CET)
時間,使用目前時區。
Date.prototype.toLocaleTimeString()
:
17:43:07
時間,使用特定地區的格式。此方法由 ECMAScript 國際化 API 提供(請參閱 ECMAScript 國際化 API),若沒有此 API,此方法將沒有太大的意義。
Date.prototype.toDateString()
:
Tue Oct 30 2001
日期。
Date.prototype.toLocaleDateString()
:
10/30/2001
日期,使用特定地區的格式。此方法由 ECMAScript 國際化 API 提供(請參閱 ECMAScript 國際化 API),若沒有此 API,此方法將沒有太大的意義。
Date.prototype.toString()
:
Tue Oct 30 2001 17:43:07 GMT+0100 (CET)
日期和時間,使用目前時區。對於任何沒有毫秒數的 Date
執行個體(也就是秒數為整數),以下表達式為真
Date
.
parse
(
d
.
toString
())
===
d
.
valueOf
()
Date.prototype.toLocaleString()
:
Tue Oct 30 17:43:07 2001
日期和時間,使用特定地區的格式。此方法由 ECMAScript 國際化 API 提供(請參閱 ECMAScript 國際化 API),若沒有此 API,此方法將沒有太大的意義。
Date.prototype.toUTCString()
:
Tue, 30 Oct 2001 16:43:07 GMT
日期和時間,使用 UTC。
Date.prototype.toGMTString()
:
已棄用;請改用 toUTCString()
。
Date.prototype.toISOString()
:
2001-10-30T16:43:07.856Z
所有內部屬性都會顯示在回傳字串中。格式符合 日期時間格式;時區永遠是 Z
。
Date.prototype.toJSON()
:
此方法會在內部呼叫 toISOString()
。它會由 JSON.stringify()
(請參閱 JSON.stringify(value, replacer?, space?))使用,以將日期物件轉換為 JSON 字串。
最長的日期時間格式為
YYYY-MM-DDTHH:mm:ss.sssZ
每個部分代表日期時間資料的幾個十進位數位。例如,YYYY
表示格式從四位數年份開始。下列小節說明每個部分的意義。格式與下列方法相關
Date.parse()
可以剖析格式。
new Date()
可以剖析格式。
Date.prototype.toISOString()
會建立一個字串,格式為上述的「完整」格式
> new Date().toISOString() '2014-09-12T23:05:07.414Z'
YYYY-MM-DD YYYY-MM YYYY
它們包括下列部分
YYYY
指的是年份(格里曆)。
MM
指的是月份,從 01 到 12。
DD
指的是日期,從 01 到 31。
例如
> new Date('2001-02-22') Date {Thu Feb 22 2001 01:00:00 GMT+0100 (CET)}
THH:mm:ss.sss THH:mm:ss.sssZ THH:mm:ss THH:mm:ssZ THH:mm THH:mmZ
它們包括下列部分
T
是格式時間部分的前綴(一個字面 T
,不是數字)。
HH
指的是小時,從 00 到 23。您可以使用 24 作為 HH
的值(指的是隔天 00 小時),但接著所有剩餘的部分都必須為 0。
mm
指的是分鐘,從 00 到 59。
ss
指的是秒,從 00 到 59。
sss
指的是毫秒,從 000 到 999。
Z
指時區,下列兩種之一
Z
” 代表 UTC
+
” 或 “-
” 後接時間 “hh:mm
”
有些 JavaScript 引擎允許您只指定時間(其他引擎需要日期)
> new Date('T13:17') Date {Thu Jan 01 1970 13:17:00 GMT+0100 (CET)}
日期格式和時間格式 也可以合併。在日期時間格式中,您可以使用日期或日期和時間(或在某些引擎中,僅使用時間)。例如:
> new Date('2001-02-22T13:17') Date {Thu Feb 22 2001 13:17:00 GMT+0100 (CET)}
日期 API 呼叫 time
的內容,ECMAScript 規格稱為 時間值。它是一個原始數字,將日期編碼為自 1970 年 1 月 1 日 00:00:00 UTC 以來的毫秒數。每個日期物件將其狀態儲存在 [[PrimitiveValue]]
內部屬性中,作為時間值(與包裝建構函式 Boolean
、Number
和 String
的執行個體用來儲存其包裝的原始值相同的屬性)。
時間值中會忽略閏秒。
下列方法適用於時間值
new Date(timeValue)
使用時間值建立日期。
Date.parse(dateTimeString)
分析包含日期時間字串的字串,並傳回時間值。
Date.now()
以時間值傳回目前日期時間。
Date.UTC(year, month, date?, hours?, minutes?, seconds?, milliseconds?)
相對於 UTC 解釋參數,並傳回時間值。
Date.prototype.getTime()
傳回儲存在接收器中的時間值。
Date.prototype.setTime(timeValue)
透過時間值變更日期,如指定。
Date.prototype.valueOf()
傳回儲存在接收器中的時間值。此方法決定如何將日期轉換為原始值,如下一小節所述。
JavaScript 整數的範圍(53 位元加上符號)足夠大,可以表示從 1970 年前約 285,616 年開始,到 1970 年後約 285,616 年結束的時間跨度。
以下是將日期轉換為時間值的幾個範例
> new Date('1970-01-01').getTime() 0 > new Date('1970-01-02').getTime() 86400000 > new Date('1960-01-02').getTime() -315532800000
Date
建構函式讓您能將時間值轉換為日期
> new Date(0) Date {Thu Jan 01 1970 01:00:00 GMT+0100 (CET)} > new Date(24 * 60 * 60 * 1000) // 1 day in ms Date {Fri Jan 02 1970 01:00:00 GMT+0100 (CET)} > new Date(-315532800000) Date {Sat Jan 02 1960 01:00:00 GMT+0100 (CET)}
透過 Date.prototype.valueOf()
將日期轉換為數字,它會傳回時間值。這讓您能比較日期:
> new Date('1980-05-21') > new Date('1980-05-20') true
您也可以執行算術運算,但請注意會忽略閏秒
> new Date('1980-05-21') - new Date('1980-05-20') 86400000
使用加號運算子 (+
) 將日期新增至另一個日期或數字,會產生字串,因為轉換為原始值的預設值是將日期轉換為字串(請參閱 加號運算子 (+) 以了解加號運算子的運作方式)
> new Date('2024-10-03') + 86400000 'Thu Oct 03 2024 02:00:00 GMT+0200 (CEST)86400000' > new Date(Number(new Date('2024-10-03')) + 86400000) Fri Oct 04 2024 02:00:00 GMT+0200 (CEST)