JavaScript - 日期 Date
Date
Date 類型使用自 UTC 世界協調時間 1970 年 1 月 1 日午夜零時開始經過的毫秒數
來保存日期
創建
通過使用 new 操作符和 Date 構造函數來創建日期對象
var now = new Date()
Date()
可以選擇傳入參數,如果不傳入參數
不傳入參數
會依據系統設置的當前時間來創建一個Date對象,返回當前的日期和時間
傳入參數 Unix 时间戳
即 从1970-1-1 00:00:00 UTC 到该日期對象(UTC時間)的毫秒数
傳入 时间戳字符串
與下文的
Date.parse()
所需的參數一樣傳入 日期成員
與 下文的
Date.UTC()
所需的參數一樣,但是 Date() 會以 本地時間 來處理參數,而不是 UTC。1
2
3// 可見最終的結果 兩個不一樣, 原因是 Date() 會以本地時間來處理參數
console.log(new Date(Date.UTC(2021,1,2,12,12,12))) // Tue Feb 02 2021 20:12:12 GMT+0800 (香港標準時間)
console.log(new Date(2021,1,2,12,12,12)) // Tue Feb 02 2021 12:12:12 GMT+0800 (香港標準時間)
以一個函數的形式來調用 Date 對象(即不使用 new 操作符)會返回一個代表當前日期和時間的字符串
1 | var d1 = new Date() |
獲取毫秒數方法
JavaScript 提供了兩種方法可以快速獲取毫秒數
Date.parse()
該方法接受一個表示日期的字符串參數(符合RFC 2822 和 ISO 8601 的日期格式,其他格式也支持,但是結果可能會與預期不同),然後根據字符串返回相應的日期的毫秒數(从1970-1-1 00:00:00 UTC 到该日期對象(UTC時間)的毫秒数)。
如果傳入的參數無法識別,則會返回
NaN
如果參數沒有指定時區,默認使用本地時區。
在 ISO 8601 格式中
- ‘2011-02-22’ 這種僅日期格式的,將會使用 UTC 時區來處理解析這個參數
- 如果是日期加時間的,則使用本地時間處理
這個方法可能在不同瀏覽器和地區,有不一樣的結果
1
2
3
4
5
6
7
8console.log(Date.parse('2012-02-02')) // 1328140800000 (utc 時間 2012-02-02 00:00:00) 以 UTC 時間處理
console.log(Date.parse('2012-02-02T02:02:02')) // 1328119322000 (utc 時間 2012-02-01 18:02:02) 以本地時間處理
console.log(Date.parse("Feb 2, 2012")) // 1328112000000 (utc 時間 2012-02-01 16:00:00) 以本地時間處理
console.log(Date.parse("Thu, 01 Jan 1970 00:00:00 GMT")) // 0 格式裏指定時區,以該時區處理
// 格式錯誤,無法解析
console.log(Date.parse('2012-02-42')) // NaNDate.UTC()
跟
Date.parse()
一樣都是返回相應的日期的毫秒數(从1970-1-1 00:00:00 UTC 到该日期對象(UTC時間)的毫秒数),區別在於傳入的參數不同,其可以傳入很多參數。其傳入的參數會以UTC 時區
處理。Date.UTC(year,month[,date[,hrs[,min[,sec[,ms]]]]])
【必須】year 年份
可以是完整格式的年份,如 2022。
如果是 0 到 99 之間,代表著 1900 年後的日期(傳入 8,會被渲染為 1908年)
【必須】month 月份
0 到 11 之間的整數
date 天數
1 到 31 之間的整數
hrs 小時
0 到 23 之間的整數
min 分鐘
0 到 59 之間的整數
sec 秒
0 到 59 之間的整數
ms 毫秒
0 到 999 之間的整數
注意: 如果沒有傳入 date 天數,則默認爲 1。
而省略其它參數,這些參數都默認為 0
如果有一個指定的參數超出其合理範圍,則 UTC 方法會通過更新其他參數直到該參數在合理範圍內。例如,為月份指定 15,則年份將會加 1,然後月份將會使用 3。
1
2console.log(Date.UTC(2021,1)) // 1612137600000 (utc 時間 2021-02-01 00:00:00)
console.log(Date.UTC(2021,1,2,12,12,12)) // 1612267932000 (utc 時間 2021-02-02 12:12:12)
獲取當前時間
返回自 1970 年 1 月 1 日 00:00:00 (UTC) 到当前时间的毫秒数。
等同於 new Date().getTime()
1 | console.log(new Date().getTime()) // 1615389429001 |
Getter 方法
方法 | 解釋 |
---|---|
getFullYear() | 根据本地时间返回指定日期对象的年份(四位数年份时返回四位数字) |
getMonth() | 根据本地时间返回指定日期对象的月份(0-11) |
getDate() | 根据本地时间返回指定日期对象的月份中的第几天(1-31) |
getHours() | 根据本地时间返回指定日期对象的小时(0-23) |
getMinutes() | 根据本地时间返回指定日期对象的分钟(0-59) |
getSeconds() | 根据本地时间返回指定日期对象的秒数(0-59) |
getMilliseconds() | 根据本地时间返回指定日期对象的毫秒(0-999) |
getDay() | 根据本地时间返回指定日期对象的星期中的第几天(0-6) 0 表示 星期日 |
getTime() | 返回从1970-1-1 00:00:00 UTC(协调世界时)到该日期经过的毫秒数,对于1970-1-1 00:00:00 UTC之前的时间返回负值。 |
getTimezoneOffset() | 返回协调世界时(UTC)相对于当前时区的时间差值,单位为分钟 |
getUTCFullYear() | 根据世界时返回特定日期对象所在的年份(4位数) |
getUTCMonth() | 根据世界时返回特定日期对象的月份(0-11) 0 代表 1 月,依此類推 |
getUTCDate() | 根据世界时返回特定日期对象一个月的第几天(1-31) |
getUTCHours() | 根据世界时返回特定日期对象当前的小时(0-23) |
getUTCMinutes() | 根据世界时返回特定日期对象的分钟数(0-59) |
getUTCSeconds() | 根据世界时返回特定日期对象的秒数(0-59) |
getUTCMilliseconds() | 根据世界时返回特定日期对象的毫秒数(0-999) |
getUTCDay() | 根据世界时返回特定日期对象一个星期的第几天(0-6) |
1 | const today = new Date(2021,2,10,22,55,21,44) |
Setter 方法
方法 | 解釋 |
---|---|
setDate() | 根据本地时间为指定的日期对象设置月份中的第几天 |
setFullYear() | 根据本地时间为指定日期对象设置完整年份(四位数年份是四个数字) |
setMonth() | 根据本地时间为指定日期对象设置月份 |
setHours() | 根据本地时间为指定日期对象设置小时数 |
setMinutes() | 根据本地时间为指定日期对象设置分钟数 |
setSeconds() | 根据本地时间为指定日期对象设置秒数 |
setMilliseconds() | 根据本地时间为指定日期对象设置毫秒数 |
setTime() | 通过指定从 1970-1-1 00:00:00 UTC 开始经过的毫秒数来设置日期对象的时间,对于早于 1970-1-1 00:00:00 UTC的时间可使用负值 |
setUTCDate() | 根据世界时设置 Date 对象中月份的一天 (1 ~ 31) |
setUTCFullYear() | 根据世界时设置 Date 对象中的年份(四位数字) |
setUTCMonth() | 根据世界时设置 Date 对象中的月份 (0 ~ 11) |
setUTCHours() | 根据世界时设置 Date 对象中的小时 (0 ~ 23) |
setUTCMinutes() | 根据世界时设置 Date 对象中的分钟 (0 ~ 59) |
setUTCSeconds() | 根据世界时设置 Date 对象中的秒钟 (0 ~ 59) |
setUTCMilliseconds() | 根据世界时设置 Date 对象中的毫秒 (0 ~ 999) |
Conversion 方法
方法 | 解釋 |
---|---|
toDateString() | 以美式英语和人类易读的形式返回该日期对象日期部分 的字符串 |
toISOString() | 把一个日期转换为符合 ISO 8601 扩展格式的字符串。 格式:YYYY-MM-DDTHH:mm:ss.sssZ ,时区总是UTC |
toJSON() | 調用 toISOString() 返回一个表示该日期的字符串。为了在 JSON.stringify() 方法中使用 |
toString() | 返回一个表示该日期对象的字符串。覆盖了Object.prototype.toString() 方法 |
toTimeString() | 以人类易读格式返回日期对象时间部分的字符串 |
toUTCString() | 把一个日期对象转换为一个以UTC时区计时的字符串 |
valueOf() | 返回一个日期对象的原始值。覆盖了 Object.prototype.valueOf() 方法 |
toLocaleString() | 返回一个表示该日期对象的字符串,该字符串与系统设置的地区关联(locality sensitive)。覆盖了 Object.prototype.toLocaleString() 方法 |
toLocaleTimeString() | 返回一个表示该日期对象时间部分的字符串,该字符串格式与系统设置的地区关联(locality sensitive) |
toLocaleDateString() | 返回一个表示该日期对象日期部分的字符串,该字符串格式与系统设置的地区关联(locality sensitive) |
1 | const today = new Date(2021,2,10,22,55,21,44) |
toLocaleString()
toLocaleTimeString()
和 toLocaleDateString()
這3個方法都接受兩個參數
【可選】locales
指定語言代碼,例如 ‘zh-HK’
具體語言代碼 可參考 MDN Intl 文檔
當沒有指定語言代碼時,會返回一個使用運行時默認的語言環境和格式(options)的格式化字符串
【可選】options
指定日期時間等輸出(文字/格式 等)
具體 options 可參考 MDN 文檔
1 | var today = new Date(2021,2,10,22,55,21,44) |
參考
- 書籍 《JavaScript 高級程序設計》
- MDN 文檔