
photo credit: Thomas Hawk Turn Back Time via photopin (license)
みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
Google Apps Scriptで日付&時刻の便利ライブラリMoment.jsを使う方法についてお伝えしています。
前回の記事はこちらです。
Moment.jsのformatメソッドで日時フォーマットの指定方法についてお伝えしました。
今回はmomentオブジェクトから各要素を取得する方法、またmomentオブジェクトに各要素をセットする方法についてお伝えします。
日時の各要素を取り出す
Dateオブジェクトの要素を取り出す
Dateオブジェクトを使った場合、各要素を取り出すときには以下メソッドを使います。
getMonth() //月(値は0~11(1月~12月))
getDate() //日
getDay() //曜日(値は0~6(日曜日~土曜日))
getHours() //時
getMinutes() //分
getSeconds() //秒
getMilliseconds() //ミリ秒
まあ、これはこれで良いと言えば良いのですが
var date = new Date(); Logger.log(date.getFullYear()); Logger.log(date.getMonth()); Logger.log(date.getDate());
んー、ちょっと毎回getなんちゃらという記述がだるいというか、FullYearってなんじゃって感じです。
momentオブジェクトの要素を取り出す方法
そこで、今回もMoment.jsの登場です。
momentオブジェクトの各要素を取り出す場合は、非常にシンプル。以下のようにすればOKです。
month() //月 (値は0~11(1月~12月))
date() //日
day() //曜日(値は0~6(日曜日~土曜日))
hours() //時
minutes() //分
seconds() //秒
milliseconds() //ミリ秒
先ほどの、年、月、日のログ出力ですが、Moment.jsで書き直すと
var m = Moment.moment(); Logger.log(m.year()); Logger.log(m.month()); Logger.log(m.date());
と、かなりシンプルに記述することができます。
日時の各要素をセットする
Dateオブジェクトに各要素をセットする
同様にDateオブジェクトに各要素をセットしたい場合は
setMonth(値) //月(値は0~11(1月~12月))
setDate(値) //日
setDay(値) //曜日(値は0~6(日曜日~土曜日))
setHours(値) //時 ※引数を4つまで渡してミリ秒まで指定することが可能
setMinutes(値) //分
setSeconds(値) //秒
setMilliseconds(値) //ミリ秒
とします。これはこれで良いのですが、setなんちゃら…そしてFullYearはなんぞや?と同じ悩みが出てきます。
けっこうあるニーズとしてちょうど0時ピッタリのタイムスタンプが欲しいときがあるのですが、こんなとき、実はDateオブジェクトはなかなか優秀でして
var date = new Date(); date.setHours(0,0,0,0); Logger.log(date);
このようにsetHoursに四つの引数を渡すだけで時、分、秒、ミリ秒を全てゼロにセットすることができます。難点としては知らない人はわかりません、ということくらいですね。
momentオブジェクトに各要素をセットする
momentオブジェクトに日時の各要素をセットする場合ですが、実はMoment.jsの場合は各要素のメソッドはgetterとしてもsetterとしても使用できるんですね。
取り出すときと同じメソッドが引数さえ指定すればセットとなります。
month(値) //月 (値は0~11(1月~12月)) ※文字列の指定も可
date(値) //日
day(値) //曜日(値は0~6(日曜日~土曜日)) ※文字列の指定も可
hours(値) //時
minutes(値) //分
seconds(値) //秒
milliseconds(値) //ミリ秒
dayメソッド、monthメソッドについては、「Sunday」とか「January」、「Feb」といった文字列での指定も可能です。
momentオブジェクトの0時ピッタリのタイムスタンプが欲しい場合は
var m = Moment.moment(); m.hours(0).minutes(0).seconds(0).milliseconds(0); Logger.log(m.format());
とします。このようにメソッドをつなげたメソッドチェーンで記述できます。これはこれでわかりやすいですね。
まとめ
Google Apps ScriptでMoment.jsライブラリを使って、momentオブジェクトの各要素を取得する方法、セットする方法についてお伝えしました。
Dateオブジェクトも局所的に便利なときがありますが、総じてmomentオブジェクトを使ったほうが簡潔に記述できることが多いですね。
getterとsetterが一緒なのも、覚えやすいですし、かっこいい感じがします。
さて、Moment.jsの使いどころはまだまだたくさんあります。
次回ですが、Moment.jsを使って日時を比較する方法についてお伝えしたいと思います。
どうぞお楽しみに!