みなさん、こんにちは!
タカハシ(@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() //ミリ秒
まあ、これはこれで良いと言えば良いのですが
function logByDate() { const date = new Date(); console.log(date.getFullYear()); console.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で書き直すと、以下のようにかなりシンプルに記述することができます。
function logByMoment() { const m = Moment.moment(); console.log(m.year()); console.log(m.month()); console.log(m.date()); }
日時の各要素をセットする
Dateオブジェクトに各要素をセットする
同様にDateオブジェクトに各要素をセットしたい場合は以下のようにします。
setMonth(値) //月(値は0~11(1月~12月))
setDate(値) //日
setDay(値) //曜日(値は0~6(日曜日~土曜日))
setHours(値) //時 ※引数を4つまで渡してミリ秒まで指定することが可能
setMinutes(値) //分
setSeconds(値) //秒
setMilliseconds(値) //ミリ秒
これはこれで良いのですが、setなんちゃら…そしてFullYearはなんぞや?と同じ悩みが出てきます。
けっこうあるニーズとしてちょうど0時ピッタリのタイムスタンプが欲しいときがあるのですが、こんなとき、実はDateオブジェクトはなかなか優秀でして、以下のようにsetHoursに四つの引数を渡すだけで時、分、秒、ミリ秒を全てゼロにセットすることができます。
function setDateElements(){ const date = new Date(); date.setHours(0,0,0,0); console.log(date); }
難点としては知らない人はわかりません、ということくらいですね。
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時ピッタリのタイムスタンプが欲しい場合は、以下のようにします。
function setMomentElements(){ const m = Moment.moment(); m.hours(0).minutes(0).seconds(0).milliseconds(0); console.log(m.format()); }
このようにメソッドをつなげたメソッドチェーンで記述できます。これはこれでわかりやすいですね。
まとめ
Google Apps ScriptでMoment.jsライブラリを使って、momentオブジェクトの各要素を取得する方法、セットする方法についてお伝えしました。
Dateオブジェクトも局所的に便利なときがありますが、総じてmomentオブジェクトを使ったほうが簡潔に記述できることが多いですね。
getterとsetterが一緒なのも、覚えやすいですし、かっこいい感じがします。
さて、Moment.jsの使いどころはまだまだたくさんあります。
次回ですが、Moment.jsを使って日時をスマートに比較する方法についてお伝えしたいと思います。
どうぞお楽しみに!
連載目次:Google Apps ScriptでMoment.jsを使う
Google Apps Scriptでよく取り扱う日付と時刻。しかし、JavaScriptの標準Dateオブジェクトは扱いがなかなか難しいんですよね。その日時の操作をとっても簡単にすることができるライブラリ「Moment.js」の使い方について、解説をしていきます。- 日付&時刻の便利ライブラリ「Moment.js」をGoogle Apps Scriptで使う方法
- Google Apps ScriptでもMoment.jsで日付&時刻の書式フォーマットを簡単に指定
- Google Apps ScriptのMoment.jsで日時の各要素をGetとSetする方法
- GAS版Moment.jsライブラリで超簡単に日時の比較をする方法
- GASでMoment.jsライブラリを使って簡単に日時の計算をする方法
- GAS版Moment.jsの破壊的な日時計算メソッドの注意点とcloneメソッドによる回避
- GASでMoment.jsライブラリを使って超スマートに日時の差をとる方法
- Google Apps Scriptを使って80歳までの残り時間をChatworkに日々通知する