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