JavaScript Date
Date 用于創建一個 JavaScript Date 實例,該實例呈現時間中的某個時刻。
Date 對象可以用于處理日期和時間。
Date 對象使用的頻率非常高,大量的業務需要對時間進行操作。
1. 基本使用
Date 需要實例化后使用。
var date = new Date();
時間最大的兩個使用場景是格式化時間與獲取時間戳。
1.1 獲取時間戳
當實例化時沒有傳遞參數給 Date
的時候,則表示創建的對象為實例化時刻的時間。
使用 getTime
即可獲取時間戳。
var date = new Date();
var timestamp = date.getTime();
console.log(timestamp); // 輸出當前時間的時間戳
部分開發者會利用隱式轉換的規則來獲取時間戳。
var date = new Date();
var timestamp = +date;
console.log(timestamp); // 輸出當前時間的時間戳
也可以通過 valueOf
來獲取時間戳。
var date = new Date();
var timestamp = date.valueOf();
console.log(timestamp); // 還是輸出當前時間的時間戳
推薦使用 getTime
方法來獲取時間戳,以便他人閱讀代碼以及避免不必要的問題。
1.2 格式化時間
格式化時間可以理解成把時間處理成想要的格式,如年-月-日 時:分;秒
。
通過 Date 對象提供的一些方法,可以獲得到對應的時間屬性。
假如想把時間格式化成年/月/日 時:分:秒
的形式:
var date = new Date();
var YYYY = date.getFullYear();
var MM = date.getMonth() + 1;
var DD = date.getDate();
var hh = date.getHours();
var mm = date.getMinutes();
var ss = date.getSeconds();
console.log([YYYY, '/', MM, '/', DD, ' ', hh, ':', mm, ':', ss].join(''));
通過 Date 對象提供的獲取年、月、日、時、分、秒的方法獲取到對應的值,最后按照想要的格式拼接即可。
需要注意的是 getMonth()
方法返回的月份是 0 至 11 ,更像是月份的索引,實際上對應的月份還要加上 1 。
2. 構造函數的參數
Date 對象可以提供 4 種類型的參數,通過參數決定時間,最后對象的實例的操作都圍繞這個決定的時間。
2.1 不傳遞參數
當不傳遞參數的時候,時間會被設置為實例化那一時刻的時間。
2.2 Unix 時間戳
這個方式與第一種不傳遞參數的方式是最常用的兩種。
應用場景大部分為從服務端獲取數據后,對時間戳進行格式化顯示。
var data = { _id: '', createdAt: 1482632382582, content: '' };
var date = new Date(data.createdAt);
var YYYY = date.getFullYear();
var MM = date.getMonth() + 1;
var DD = date.getDate();
var hh = date.getHours();
var mm = date.getMinutes();
var ss = date.getSeconds();
console.log([YYYY, '/', MM, '/', DD, ' ', hh, ':', mm, ':', ss].join(''));
// 輸出:2016/12/25 10:19:42
2.3 時間戳字符串
這里并不是指字符串形式的 Unix 時間戳
,而是符合 IETF-compliant RFC 2822 timestamps 或 version of ISO8601 標準的時間字符串。
實際上只要能被 Date.parse
正確解析成時間戳的字符串,都可以作為參數傳遞過去。
var timestamp = Date.parse('2020/02/02 11:22:33');
var date1 = new Date(timestamp);
var date2 = new Date('2020/02/02 11:22:33');
2.4 日期的每一個時間屬性
這里的時間屬性是指:年、月、日、時、分、秒、毫秒。
參數也按照這個順序傳遞。
// 2048年10月24日 9點9分6秒
var date = new Date(2048, 10 - 1, 24, 9, 9, 6, 0);
var YYYY = date.getFullYear();
var MM = date.getMonth() + 1;
var DD = date.getDate();
var hh = date.getHours();
var mm = date.getMinutes();
var ss = date.getSeconds();
console.log([YYYY, '/', MM, '/', DD, ' ', hh, ':', mm, ':', ss].join(''));
// 輸出:2048/10/24 9:9:6
第二個參數之所以要減去 1 ,是因為月份是從 0 開始計算的,所以十月應該表示成 9 。
3. 其他常用方法
常量 | 描述 |
---|---|
Date.UTC | 方法接受的參數同日期構造函數接受最多參數時一樣,返回從 1970-1-1 00:00:00 UTC到指定日期的的毫秒數。 |
Date.now | 返回自 1970 年 1 月 1 日 00:00:00 (UTC) 到當前時間的毫秒數。 |
Date.parse | 解析一個表示某個日期的字符串,并返回從1970-1-1 00:00:00 UTC 到該日期對象(該日期對象的 UTC 時間)的毫秒數,如果該字符串無法識別,或者一些情況下,包含了不合法的日期數值(如:2015-02-31),則返回值為NaN。 |
Date.getDate | 根據本地時間,返回一個指定的日期對象為一個月中的哪一日(從 1–31)。 |
Date.getDay | 根據本地時間,返回一個具體日期中一周的第幾天,0 表示星期天。 |
Date.getFullYear | 根據本地時間返回指定日期的年份。 |
Date.getHours | 方法根據本地時間,返回一個指定的日期對象的小時。 |
Date.getMilliseconds | 根據本地時間,返回一個指定的日期對象的毫秒數。 |
Date.getMinutes | 方法根據本地時間,返回一個指定的日期對象的分鐘數。 |
Date.getMonth | 根據本地時間,返回一個指定的日期對象的月份,為基于 0 的值(0 表示一年中的第一月)。 |
Date.getSeconds | 方法根據本地時間,返回一個指定的日期對象的秒數。 |
4. 小結
Date
對象用于處理日期與時間。
通常會采用不傳參
或者傳遞一個 Unix 時間戳
來生成 Date
實例,另幾種參數形式使用場景較少。
需要注意的是,getMonth
方法返回的月份,是從 0
開始計數的,對應真實月份需要加上 1
。