Last Updated on 2022-08-26 by Clay
在使用 JavaScript 進行跟時間有關的比較與操作時,盡量使用 Date()
可以讓開發方便許多。以下我將依照:
- 初始化時間
- 時間與時間之間的比較
- 時間的加減
這三個小主題去做紀錄。希望之後當我又再次有了需要使用 JavaScript 來操作時間的需求時,可以通過閱讀本篇筆記來快速喚醒記憶。
初始化時間
首先,我們來看看如何初始化時間。在 JavaScript 當中,我們可以使用 Date()
來建立一個包含日期在內的時間。
取得現在的時間
var now = new Date();
console.log(now);
Output:
2021-12-22T11:36:35.078Z
初始化指定的日期
可以使用 yyyy-mm-dd
的格式去初始化、或是輸入指定的月份、日期、年份。
var date_01 = new Date("December 02, 1994");
var date_02 = new Date("1994-12-02");
var date_03 = new Date("1994/12/02");
console.log(date_01);
console.log(date_02);
console.log(date_03);
Output:
1994-12-02T00:00:00.000Z
1994-12-02T00:00:00.000Z
1994-12-02T00:00:00.000Z
這幾種方法都是可以的。
設置指定的時間
我們可以使用 setHours()
來設置成指定的時間(或是在初始化日期時一併在後方加入 hh:mm:ss
的格式)
// Init
var date_01 = new Date("1994-12-02");
var date_02 = new Date("1994/12/02");
// setHours(H, M, S)
date_01.setHours(12, 30, 0);
date_02.setHours(17, 45, 0);
// Print
console.log(date_01);
console.log(date_02);
Output:
1994-12-02T12:30:00.000Z
1994-12-02T17:45:00.000Z
時間與時間之間的比較
只要儲存時間的資料型態是 Date()
,我們可以很輕易地使用 > 或 < 來比較兩個不同的時間。以概念上來說,時間點比較晚的日期會是比較大的。
// Init
var date_01 = new Date("1994-12-02");
var date_02 = new Date("1994/12/02");
// setHours(H, M, S)
date_01.setHours(12, 30, 0);
date_02.setHours(17, 45, 0);
// Compaison
if (date_01 < date_02) {
console.log("date_01 is earlier.");
}
else {
console.log("date_01 is earlier.");
}
Output:
date_01 is earlier.
時間的加減
時間的加減操作如果是自己手刻,那會是挺麻煩的一件事,畢竟你可能會需要考慮到日期、月份、年份是否也相應著產生改動。但是其實我們可以先將 Date() 時間轉成時間戳,減去或加上相應的秒數,再將新的時間戳以 Date() 的資料型態讀入,就會是我們全新的時間了。
而時間戳(Unix timestamp)究竟是什麼呢?其實是從格林威治時間 1970-01-01 00:00:00 到指定時間為止的總秒數。
而即使是在不同的時區中,特定時間底的時間戳也都會是相同的,這代表我們只要轉換成時間戳就可以輕鬆地操作時間,十分地方便。
// Init
var date = new Date("1994-12-02 12:30:00");
var date_ts = date.getTime();
console.log("raw: ", date)
// -15 minutes
date.setTime(date_ts - 15 * 1000 * 60);
console.log("-15 min: ", date);
// + 2 hours
date.setTime(date_ts + 2 * 1000 * 60 * 60);
console.log("+2 hours:", date);
// -3 Days
date.setTime(date_ts - 3 * 1000 * 60 * 60 * 24);
console.log("-3 Days: ", date);
Output:
raw: 1994-12-02T12:30:00.000Z
-15 min: 1994-12-02T12:15:00.000Z
+2 hours: 1994-12-02T14:30:00.000Z
-3 Days: 1994-11-29T12:30:00.000Z
References
- https://www.w3schools.com/js/js_date_methods.asp
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
時間加減第8行log是不是寫錯了
感謝告知!確實寫錯了~
哈哈,我總是這麼粗心