JavaScript Date 時間和日期

JavaScript 的 Date 物件讓你可以用來做跟日期和時間相關的操作。

宣告 Date 物件 (Creating Date Object)

建立一個表示現在的 Date 物件 (Current Date and Time)

語法:

new Date();

用法:

var today = new Date();

建立特定時間點的 Date 物件 - 傳入一個數字 (Timestamp)

傳入的參數是一個數字,值表示從 1970-01-01 00:00:00 UTC (格林威治標準時間) 開始累計到某時間點的毫秒數 (milliseconds)。

語法:

new Date(milliseconds);

用法:

// Sat Dec 10 2016 17:16:06 GMT+0800 (CST)
var date = new Date(1481361366000);
例如一天總共有 86,400,000 毫秒 (606024*1000)。

建立特定時間點的 Date 物件 - 傳入多個數字,指定年、月、日、時、分、秒、毫秒

語法:

new Date(year, month[, date[, hours[, minutes[, seconds[, milliseconds]]]]]);
參數 "時" 採 24 小時制。

用法:

// Sun Dec 17 1995 23:30:15 GMT+0800 (CST)
var birthday = new Date(1995, 11, 17, 23, 30, 15);
JavaScript 表達月份 (month) 是從 0 到 11,0 是一月;11 是十二月。

也可以省略在後面的參數,不設定預設為 0:

// Sun Dec 17 1995 00:00:00 GMT+0800 (CST)
var birthday = new Date(1995, 11, 17);
Date 物件參數的日期,預設的時區 (time zone) 是本地時區 (local time),也就是你瀏覽器作業系統設定的時區。

如果傳入的日期和時間參數超出正常範圍,例如月份輸入 13,秒數輸入 80,JavaScript 會自動增減做進位。例如,new Date(2018, 13, 1) 會被看作是 new Date(2019, 1, 1)new Date(2016, 9, 10, 0, 80) 會被看作是 new Date(2016, 9, 10, 1, 20)

建立特定時間點的 Date 物件 - 將時間文字轉換成 Date 物件

語法:

new Date(dateString);

用法:

// Tue Mar 15 2016 08:00:00 GMT+0800 (CST)
var someday = new Date('Wed Mar 15 2016 08:00:00 GMT+0800 (CST)');

JavaScript 支援所有可以被 parse 的時間格式,詳細請看 parse() 方法的介紹。

日期時間比較 (Compare Dates)

你可以用 >, <, <=, >=, <==>== 運算子來比較兩個 Date 物件的時間前後關係:

var today = new Date();
var someday = new Date(2022, 10, 1);

if (someday > today) {
    alert('Today is before 2022/10/1.');
} else {
    alert('Today is after 2022/10/1.');
}

但如果你要比較兩個日期是否相等 - 運算子 ==, !=, ===!==,你沒辦法直接比較,而是要先將 Date 物件用 date.getTime() 轉換為數值型態才能比較:

var d1 = new Date(2016, 1, 1);
var d2 = new Date(2016, 1, 1);

var same = d1.getTime() === d2.getTime();    // true
var notSame = d1.getTime() !== d2.getTime(); // false

Date 物件提供的方法 (Methods)

將時間字串轉成從 1970-01-01 00:00:00 UTC 開始累計到現在的毫秒數 (milliseconds):

parse()

取得日期和時間相關的方法:

方法用途
getFullYear()取得是幾年 (yyyy)
getMonth()取得是幾月 (0-11)
getDate()取得是幾日 (1-31)
getHours()取得是幾時 (0-23)
getMinutes()取得是幾分 (0-59)
getSeconds()取得是幾秒 (0-59)
getMilliseconds()取得是幾毫秒 (0-999)
getDay()取得是星期幾 (0-6)
getTime()取得從 1970-01-01 00:00:00 UTC 累計的毫秒數

設定日期和時間相關的方法:

方法用途
setFullYear()設定是是幾年
setMonth()設定是幾月 (0-11)
setDate()設定是幾日 (1-31)
setHours()設定是幾時 (0-23)
setMinutes()設定是幾分 (0-59)
setSeconds()設定是幾秒 (0-59)
setMilliseconds()設定是幾毫秒 (0-999)
setTime()用 timestamp milliseconds 設定是什麼日期時間

UTC 時區相關的操作

由 UTC 時區的日期和時間取得從 1970-01-01 00:00:00 UTC 開始累計到你指定的時間點的毫秒數 (milliseconds):

Date.UTC()

取得日期和時間相關的方法:

方法用途
getUTCFullYear()同 getFullYear(),但時區是 UTC
getUTCMonth()同 getMonth(),但時區是 UTC
getUTCDate()同 getDate(),但時區是 UTC
getUTCHours()同 getHours(),但時區是 UTC
getUTCMinutes()同 getMinutes(),但時區是 UTC
getUTCSeconds()同 getSeconds(),但時區是 UTC
getUTCMilliseconds()同 getMilliseconds(),但時區是 UTC
getUTCDay()同 getDay(),但時區是 UTC
toUTCString()取得 UTC 時區的時間字串

設定日期和時間相關的方法:

方法用途
setUTCFullYear()同 setFullYear(),但時區是 UTC
setUTCMonth()同 getMonth(),但時區是 UTC
setUTCDate()同 setDate(),但時區是 UTC
setUTCHours()同 setHours(),但時區是 UTC
setUTCMinutes()同 setMinutes(),但時區是 UTC
setUTCSeconds()同 setSeconds(),但時區是 UTC
setUTCMilliseconds()同 setMilliseconds(),但時區是 UTC