Dateオブジェクトで日付操作

標準オブジェクトの「Date」を利用した日付操作の方法について確認します。「西暦の取得」「月の取得」「日時の差分の取得方法」など取り上げます。

Dateオブジェクト生成

コンストラクタ引数を指定しない場合、現在日時のDateオブジェクトが生成されます。

now = new Date()
// Mon Sep 03 2018 17:20:30 GMT+0900 (Japan Standard Time)

day = new Date(2018, 8, 10)
// Mon Sep 10 2018 00:00:00 GMT+0900 (Japan Standard Time)

day = new Date('2018-01-17T05:25:10')
// Wed Jan 17 2018 05:25:10 GMT+0900 (Japan Standard Time)
月の扱いに注意
new Date(2018, 8, 10) と指定したとき、Sep(9月) となっています。
月は、1月 = 0 からスタートします。

get系メソッド

西暦を取得|getFullYear

day = new Date(2018, 8, 10, 03, 30, 20)
day.getFullYear()  // 2018

月を取得|getMonth

day = new Date(2018, 8, 10, 03, 30, 20)
day.getMonth()  // 8

8 = 9月 であることに注意します。

日付を取得|getDate

day = new Date(2018, 8, 10, 03, 30, 20)
day.getDate()  // 10

時間を取得|getHours

day = new Date(2018, 8, 10, 03, 30, 20)
day.getHours()  // 3

分を取得|getMinutes

day = new Date(2018, 8, 10, 03, 30, 20)
day.getMinutes()  // 30

秒を取得|getSeconds

day = new Date(2018, 8, 10, 03, 30, 20)
day.getSeconds()  // 20

ミリ秒を取得|getMilliseconds

day = new Date(2018, 8, 10, 03, 30, 20)
day.getMilliseconds()  // 0

曜日番号を取得|getDay

day = new Date(2018, 8, 10, 03, 30, 20)
day.getDay()  // 1
番号 曜日
0 日曜
1 月曜
2 火曜
3 水曜
4 木曜
5 金曜
6 土曜

UNIXタイムスタンプを取得|getTime

ミリ秒単位 でUNIXタイムスタンプを取得します。

day = new Date(2018, 8, 10, 03, 30, 20)
day.getTime()  // 1536517820000
UNIXタイムスタンプ
1970年1月1日 00:00:00 UTC からの経過時間です。

set系メソッド

西暦を設定|setFullYear

day = new Date(2018, 8, 10, 03, 30, 20)  // Mon Sep 10 2018 03:30:20 GMT+0900 (Japan Standard Time)

day.setFullYear(2015)

day  // Thu Sep 10 2015 03:30:20 GMT+0900 (Japan Standard Time)

月を設定|setMonth

day = new Date(2018, 8, 10, 03, 30, 20)  // Mon Sep 10 2018 03:30:20 GMT+0900 (Japan Standard Time)

day.setMonth(0)

day  // Wed Jan 10 2018 03:30:20 GMT+0900 (Japan Standard Time)

日付を設定|setDate

day = new Date(2018, 8, 10, 03, 30, 20)  // Mon Sep 10 2018 03:30:20 GMT+0900 (Japan Standard Time)

day.setDate(10)
day  // Mon Sep 10 2018 03:30:20 GMT+0900 (Japan Standard Time)

day.setDate(40)
day  // Wed Oct 10 2018 03:30:20 GMT+0900 (Japan Standard Time)

時間を設定|setHours

day = new Date(2018, 8, 10, 03, 30, 20)  // Mon Sep 10 2018 03:30:20 GMT+0900 (Japan Standard Time)

day.setHours(22)
day  // Mon Sep 10 2018 22:30:20 GMT+0900 (Japan Standard Time)

day.setHours(30)
day  // Tue Sep 11 2018 06:30:20 GMT+0900 (Japan Standard Time)

分を設定|setMinutes

day = new Date(2018, 8, 10, 03, 30, 20)  // Mon Sep 10 2018 03:30:20 GMT+0900 (Japan Standard Time)

day.setMinutes(11)
day  // Mon Sep 10 2018 03:11:20 GMT+0900 (Japan Standard Time)

day.setMinutes(-20)
day  // Mon Sep 10 2018 02:40:20 GMT+0900 (Japan Standard Time)

秒を設定|setSeconds

day = new Date(2018, 8, 10, 03, 30, 20)  // Mon Sep 10 2018 03:30:20 GMT+0900 (Japan Standard Time)

day.setSeconds(10)
day  // Mon Sep 10 2018 03:30:10 GMT+0900 (Japan Standard Time)

day.setSeconds(61)
day  // Mon Sep 10 2018 03:31:01 GMT+0900 (Japan Standard Time)

ミリ秒を設定|setMilliseconds

day = new Date(2018, 8, 10, 03, 30, 20)  // Mon Sep 10 2018 03:30:20 GMT+0900 (Japan Standard Time)
day.getMilliseconds()  // 0

day.setMilliseconds(300)
day  // Mon Sep 10 2018 03:30:20 GMT+0900 (Japan Standard Time)
day.getMilliseconds()  // 300

day.setMilliseconds(2500)
day  // Mon Sep 10 2018 03:30:22 GMT+0900 (Japan Standard Time)
day.getMilliseconds()  // 500

to系メソッド

言語環境に合わせて出力
( toLocaleString, toLocaleDateString )

day = new Date(2018, 8, 10, 03, 30, 20)

// 英語
day.toLocaleDateString('en-US')  // "9/10/2018"
day.toLocaleString('en-US')  // "9/10/2018, 3:30:20 AM"

// 日本語
day.toLocaleDateString('ja-JP')  // "2018/9/10"
day.toLocaleString('ja-JP')  // "2018/9/10 3:30:20"

// 第二引数のオプションを指定
var options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' }
day.toLocaleDateString('ja-JP', options)  // "2018年9月10日月曜日"

日時の加算・減算

6ヶ月後

setMonthメソッドgetMonthメソッド を利用して、6ヶ月後 を求めてみます。

day = new Date(2018, 8, 10, 03, 30, 20)  // Mon Sep 10 2018 03:30:20 GMT+0900 (Japan Standard Time)

day.setMonth(day.getMonth() + 6)

day  // Sun Mar 10 2019 03:30:20 GMT+0900 (Japan Standard Time)

7日前

setDateメソッドgetDateメソッド を利用して、7日前 を求めてみます。

day = new Date(2018, 8, 10, 03, 30, 20)  // Mon Sep 10 2018 03:30:20 GMT+0900 (Japan Standard Time)

day.setDate(day.getDate() - 7)

day  // Mon Sep 03 2018 03:30:20 GMT+0900 (Japan Standard Time)

日時の差分

getTimeメソッドUNIXタイムスタンプ を取得して差分を求めます。

day1 = new Date(2018, 8, 10, 03, 30, 20)  // Mon Sep 10 2018 03:30:20 GMT+0900 (Japan Standard Time)
day2 = new Date(2018, 8, 21, 10, 05, 50)  // Fri Sep 21 2018 10:05:50 GMT+0900 (Japan Standard Time)


diff = day2.getTime() - day1.getTime()  // 974130000

// 日数の差分
diff / (24 * 60 * 60 * 1000)  // 11.274652777777778

// 時間の差分
diff / (60 * 60 * 1000)   // 270.59166666666664

参考