Dateオブジェクト – 日時を取得する
Google Apps Scriptを使っていて日時を使う場面はたくさんあります。
Calendarはもちろん、ファイル名やフォルダ名に年月日をつけたかったりとか、スプレッドシートに年月日を書き込みたかったりとか。いろいろ。
基本的なDateオブジェクトの使い方
// 今の日時を取得する
const date = new Date()
日時を取得するにはnew Date()とします。
謎の「new」をDate()の前にくっつけます。これでオッケー。
試しに出力してみます。
const setDate = () => {
// 今の日時を取得する
const date = new Date()
console.log(date)
}
実行結果

おっとなんか扱いにくいそうなのが出てきました。こいつをうまく扱えるようにしていきます。
Dateオブジェクトから日時の要素を取得する
上の扱いにくそうなやつからいろんなものを取得できます。
- 年を取得する
- 月を取得する
- 日を取得する
- 時を取得する
- 分を取得する
- 時や分を2桁0埋めで取得する
- 秒を取得する
- UNIX時間を取得する
- UTC日時を取得する
- 英国の時間表記で取得する
- 曜日を取得する
順番にやっていきます。ちなみに、今は2024年3月21日の22時くらいです。
年を取得する
const setDate = () => {
// 今の日時を取得する
const date = new Date()
const year = date.getFullYear()
console.log(year)
}
実行結果

月を取得する
const setDate = () => {
// 本日の日付を取得する
const date = new Date()
const month = date.getMonth() + 1
console.log(month)
}
実行結果

getMonthで今月(3月)を取得しているのにわざわざ+1をしているのは、getMonthで得られるのは月の配列だからです。
今月は(3月)は2と表現されます。1月が0だからです。
つまりこういうことです。
- 0:1月
- 1:2月
- 2:3月
- 3:4月
- 4:5月
- 5:6月
- 6:7月
- 7:8月
- 8:9月
- 9:10月
- 10:11月
- 11:12月
日を取得する
const setDate = () => {
// 本日の日付を取得する
const date = new Date()
const day = date.getDate()
console.log(day)
}
実行結果

日を取得するのはgetDateです。getDayという似たようなやつもありますが、あれは曜日を取得するメソッドです。
時を取得する
const setDate = () => {
// 本日の日付を取得する
const date = new Date()
const hours = date.getHours()
console.log(hours)
}
実行結果

分を取得する
const setDate = () => {
// 本日の日付を取得する
const date = new Date()
const minutes = date.getMinutes()
console.log(minutes)
}
実行結果

時や分を2桁0埋め形式で取得する
時や分を09:03(9時3分)のように取得したいときは、
const setDate = () => {
// 本日の日付を取得する
const date = new Date()
const hours = date.getHours().toString().padStart(2, '0')
const minutes = date.getMinutes().toString().padStart(2, '0')
console.log(hours)
console.log(minutes)
}
実行結果

今は22時3分です。ですので22時は0埋めされずにそのまま出力されてます。
ところが、3分は0埋めされて、03と出力されてます。
getHours、getMinutesで取得できるのは数値型です。
数値型をtoStringメソッドで文字列型に変換して、padStart(2, ‘0’)で2桁0埋めを実現してます。
padStartは文字列型のデータに対して利用できるメソッドなので文字列型に一度変換する必要があります。
第一引数は桁数、第二引数は足りない桁を埋める文字です。ここでは0を指定しています。
秒を取得する
const setDate = () => {
// 本日の日付を取得する
const date = new Date()
const seconds = date.getSeconds()
console.log(seconds)
}
実行結果

UNIX時間を取得する
const setDate = () => {
// 本日の日付を取得する
const date = new Date()
const unixTime = date.getTime()
console.log(unixTime)
}
実行結果

謎の数字を取得できました。
これ、UNIX時間ってやつで、1970年1月1日00:00:00UTCからのミリ秒数です。
なんのことかさっぱりわからないと思いますが、私にもわかりません。
ただ、便利なのは絶対的な時間を扱える点です。
たとえば、明日の同一時刻を指定するときにはこんなふうにできます。
const tomorrow = new Date(unixTime + (1000 * 60 * 60 * 24))
1ミリ秒の1000倍が1秒で、1秒の60倍が1分で、1分の60倍が1時間で、1時間の24倍が★明日★ということですね。
UTCの日時を取得する
UTCは世界標準時のことです。要するにグリニッジ天文台です。
const setDate = () => {
// 本日の日付を取得する
const date = new Date()
const utcHours = date.getUTCHours()
console.log(utcHours)
}
現在は日本時間の22時なので、UTC時間は9時間前となります。

ロンドンの昼休み明けに思いを馳せることができます。
英国の時間表記で取得する
DateオブジェクトのtoLocaleStringメソッドでいろいろな形式の日時を取得できます。
たとえば英国の時間表記
const setDate = () => {
// 本日の日付を取得する
const date = new Date()
const englishTime = date.toLocaleString('en-GB')
console.log(englishTime)
}
実行結果

英国ではAM/PM表記を使わないようです。しらんけど。
曜日を取得する
const setDate = () => {
// 本日の日付を取得する
const date = new Date()
const weekDay = date.getDay()
console.log(weekDay)
}
曜日はgetDayメソッドで取得します。今は木曜日ですので
実行結果

はい、4とかいう役に立たない数字を取得できました。
ぐぬぬ。
なぜかというと、getDayで取得できるのは曜日の配列番号だからです。
つまりこういうことです。
- 0:日曜日
- 1:月曜日
- 2:火曜日
- 3:水曜日
- 4:木曜日
- 5:金曜日
- 6:土曜日
ま、普通は本日は木曜日なので4が取得できて嬉しいっス!
とはなりませんよね。
木曜日を取得するにはこのようにします。
const setDate = () => {
// 本日の日付を取得する
const date = new Date()
const japaneseWeekDay = date.toLocaleString('ja-JP', {weekday: 'long'})
console.log(japaneseWeekDay)
}
実行結果

このようにtoLocaleStringでどの地域の日時形式なのか(ここでは日本)を指定して、optionに表示形式を指定すると曜日をすんなり取得できます。
時間よ止まれ!
