Quantcast
Channel: いつも隣にITのお仕事
Viewing all articles
Browse latest Browse all 2098

Google Apps ScriptのMoment.jsで日時の各要素をGetとSetする方法

$
0
0
clock-set

photo credit: Thomas Hawk Turn Back Time via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

Google Apps Scriptで日付&時刻の便利ライブラリMoment.jsを使う方法についてお伝えしています。

前回の記事はこちらです。

Google Apps ScriptでもMoment.jsで日付&時刻の書式フォーマットを簡単に指定
Google Apps Scriptで日付&時刻の便利ライブラリMoment.jsを使う方法についてお伝えしています。今回は日時の書式フォーマットを指定するformatメソッドの使い方です。

Moment.jsのformatメソッドで日時フォーマットの指定方法についてお伝えしました。

今回はmomentオブジェクトから各要素を取得する方法、またmomentオブジェクトに各要素をセットする方法についてお伝えします。

日時の各要素を取り出す

Dateオブジェクトの要素を取り出す

Dateオブジェクトを使った場合、各要素を取り出すときには以下メソッドを使います。

getFullYear() //年
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です。

year() //年
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オブジェクトに各要素をセットしたい場合は

setFullYear(値) //年
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としても使用できるんですね。

取り出すときと同じメソッドが引数さえ指定すればセットとなります。

year(値) //年
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を使って日時を比較する方法についてお伝えしたいと思います。

どうぞお楽しみに!

連載目次:Google Apps ScriptでMoment.jsを使う

Google Apps Scriptでよく取り扱う日付と時刻。しかし、JavaScriptの標準Dateオブジェクトは扱いがなかなか難しいんですよね。その日時の操作をとっても簡単にすることができるライブラリ「Moment.js」の使い方について、解説をしていきます。
  1. 日付&時刻の便利ライブラリ「Moment.js」をGoogle Apps Scriptで使う方法
  2. Google Apps ScriptでもMoment.jsで日付&時刻の書式フォーマットを簡単に指定
  3. Google Apps ScriptのMoment.jsで日時の各要素をGetとSetする方法

Viewing all articles
Browse latest Browse all 2098

Trending Articles