JavaScript Date 時間和日期-學習筆記

Thomas Hung
Thomas 學習筆記
10 min readApr 30, 2020
Photo by Henry & Co. on Unsplash

Date 物件可以用來做日期與時間的相關操作。

宣告 Date 物件 (Creating Date Object)

let day = new Date()

建立特定時間點的 Date (value) 物件

傳入的參數是個數值 value,數值從 1970年1月1日00:00:00 UTC (格林威治標準時間) ,開始累計至到某個時間點的毫秒數 milliseconds

new Date(1581361526000) //Tue Feb 11 2020 03:05:26 GMT+0800 

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

new Date(year, month [, day [, hours [, minutes [, seconds [, milliseconds]]]]]);

如以下範例:

new Date(1988, 3, 15, 10, 22 , 15) //Fri Apr 15 1988 10:22:15 GMT+0800
  • 參數 hours: 使用 24小時制。
  • 參數 month: 表達月份從0~11,如 0 是 1 月,11 是 12月。
  • 可以只輸入年、月、日,之後省略,並自動預設為 0,如下:
new Date(1988, 3, 15) //Fri Apr 15 1988 00:00:00 GMT+0800

注意在輸入數值時,如超出時間的範圍會自動增減及進位,例如: new Date(2019, 13, 1) 會改成 new Date(2019, 1, 1) 記得 1是 2月,new Date(2019, 11, 1, 10, 11, 70) 會改成 new Date(2019, 11, 1, 10, 11, 10) ,70 秒改成 10 秒。

日期時間比較 (Compare Dates)

可以用比較運算子來作比較,>、<、> =、< =

let today=new Date()
let someday=new Date(2019 , 10, 1)
if(today > someday) console.log(`今天日期是${today}`)
// 今天日期是Sat Apr 25 2020 16:28:42 GMT+0800

但如果要比較兩個日期與時間,運算子 ===、!== 而是要先將 Date() 物件使用date.getTime() 轉換數值型別才可比較。

let today=new Date()
let someday=new Date(2019 , 10, 1)
today.getTime() === someday.getTime() //false
today.getTime() !== someday.getTime() //true

Date.length 屬性

數值是7,代表參數共有7個如下:

(year, month, day, hours, minutes, seconds, milliseconds)

Date 物件提供的方法 (Methods)

Date.now()

  • 取得從 1970–01–01 00:00:00 ,開始累計到現在的毫秒數。
Date.now()  // 1587811443081

Date.parse(dateString)

  • 將日期時間字串轉成數字型態,數字是從 1970–01–01 00:00:00 ,開始累計到現在的毫秒數。
  • 參數 dateString : 須符合 RFC2822ISO 8601 格式,否則回傳 NaN
  • 它的背後其實執行 new Date() 物件。
  • 注意MM-DD ,如果月與日只有輸入個位數時,會發生錯誤。例如:1 須寫成 01

YYYY-MM-DD

Date.parse('2019-11-1')  // 1572537600000

YYYY-MM (DD預設為1)

Date.parse('2019-11')  // 1572566400000

YYYY(MM-DD預設為1)

Date.parse('2019')  // 1546300800000

YYYY-MM-DDTHH:MM:SS(T代表UTC時間)

Date.parse('2019-11-01T10:30:33')  // 1572575433000

MM/DD/YYYY

Date.parse('10/1/2019')  // 1569859200000

使用完整的日期時間格式

Date.parse('Sat Apr 25 2020 16:28:42 GMT+0800')  // 1587803322000

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

Date.prototype.getFullYear()

  • 取得 Date 物件的年份。
let date = new Date('Sat Apr 25 2019 16:28:42 GMT+0800')
date.getFullYear() // 2019

Date.prototype.getMonth()

  • 取得 Date 物件的月份,月份是從0開始至11
let date=new Date('3/25/2019 16:28:42 GMT+0800')
date.getMonth() // 2

Date.prototype.getDate()

  • 取得 Date 物件的日期。
let date=new Date('3/25/2019 16:28:42 GMT+0800')
date.getDate() // 25

Date.prototype.getHours()

  • 取得 Date 物件的小時,從 0~23小時。
let date=new Date('3/25/2019 23:28:42 GMT+0800')
date.getHours() // 23

Date.prototype.getMinutes()

  • 取得 Date 物件的分鐘,從 0~59分鐘。
let date=new Date('3/25/2019 23:28:42 GMT+0800')
date.getMinutes() // 28

Date.prototype.getSeconds()

  • 取得 Date 物件的秒數,從 0~59秒。
let date=new Date('3/25/2019 23:28:59 GMT+0800')
date.getSeconds() // 59

Date.prototype.getMilliseconds()

  • 取得 Date 物件的毫秒數,從 000~999毫秒。
let date=new Date('3/25/2019 23:28:59:456 GMT+0800')
date.getMilliseconds() // 456

Date.prototype.getDay()

  • 取得 Date 物件的星期,從 0~60代表星期日,1代表星期一,依此類推 。
let date=new Date('3/31/2019 23:28:59:123 GMT+0800')
date.getDay() // 0

Date.prototype.getTime()

  • 取得 Date 物件從 1970–01–01 00:00:00 ,開始累計到現在的毫秒數。
let date=new Date('3/31/2019 23:28:59:123 GMT+0800')
date.getTime() // 1554046139123

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

Date.prototype.setFullYear(yearValue[, monthValue[, dayValue]])

  • 設定 Date 物件的年份。
  • 參數 yearValue :設定年份的數值。
let date=new Date('3/31/2019 23:28:59:123 GMT+0800')
date.setFullYear(2020)
date.getFullYear() // 2020

Date.prototype.setMonth(monthValue[, dayValue])

  • 設定 Date 物件的月份。
  • 參數 monthValue:設定月份的數值,月份是從0開始至11
let date=new Date('3/31/2019 23:28:59:123 GMT+0800')
date.setMonth(4)
date.getMonth() // 4
date //Fri May 31 2019 23:28:59 GMT+0800

Date.prototype.setDate(dayValue)

  • 設定 Date 物件的日期。
  • 參數 dayValue:設定日期的數值。
let date=new Date('3/31/2019 23:28:59:123 GMT+0800')
date.setDate(4)
date.getDate() // 4
date //Mon Mar 04 2019 23:28:59 GMT+0800

Date.prototype.setHours(hoursValue[, minutesValue[, secondsValue[, msValue]]])

  • 設定 Date 物件的小時。
  • 參數 hoursValue:設定小時的數值,從 0~23小時。
let date=new Date('3/31/2019 23:28:59:123 GMT+0800')
date.setHours(10)
date.getHours() // 10
date //Sun Mar 31 2019 10:28:59 GMT+0800

Date.prototype.setMinutes(minutesValue[, secondsValue[, msValue]])

  • 設定 Date 物件的分鐘。
  • 參數 minutesValue:設定分鐘的數值,從 00~59分鐘。
let date=new Date('3/31/2019 23:28:59:123 GMT+0800')
date.setMinutes(59)
date.getMinutes() // 59
date //Sun Mar 31 2019 23:59:59 GMT+0800

Date.prototype.setSeconds(secondsValue[, msValue])

  • 設定 Date 物件的秒數。
  • 參數 secondsValue:設定秒數的數值,從 00~59秒。
let date=new Date('3/31/2019 23:28:59:123 GMT+0800')
date.setSeconds(9)
date.getSeconds() // 9
date //Sun Mar 31 2019 23:28:09 GMT+0800

Date.prototype.setMilliseconds(msValue)

  • 設定 Date 物件的毫秒。
  • 參數 secondsValue:設定毫秒的數值,從 000~999毫秒。
let date=new Date('3/31/2019 23:28:59:123 GMT+0800')
date.setMilliseconds(989)
date.getMilliseconds() // 989

Date.prototype.setTime(timeValue)

  • 設定 Date 物件從 1970–01–01 00:00:00 ,開始累計到現在的毫秒數。
  • 參數 timeValue:設定的數值。
let date=new Date()
date.setTime(1587777166060)
date //Sat Apr 25 2020 09:12:46 GMT+0800

Date.prototype.toString()

  • 回傳Date 物件的字串。
let date=new Date('3/31/2019 23:28:59:123 GMT+0800')
date.toString() //"Sun Mar 31 2019 23:28:59 GMT+0800"

Date.prototype.valueOf()

  • 回傳Date 物件的原始值。
let date=new Date('3/31/2019 23:28:59:123 GMT+0800')
date.valueOf() //1554046139123

UTC 時區相關的操作

它是另一種設定與取得時區的方法,與上述一樣但時區不同,時區是UTC。

參考:Date

以上是我對 Date 時間和日期 的學習筆記 😉。

***如果有任何想法,也歡迎留言與我分享~***

--

--

Thomas Hung
Thomas 學習筆記

when you feel like quitting,think about why you started.