Google Apps ScriptでもMoment.jsで日付&時刻の書式フォーマットを簡単に指定


moment-clock

photo credit: Joanbrebo Juliol_0086 via photopin (license)

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

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

前回はこちらの記事。

日付&時刻の便利ライブラリ「Moment.js」をGoogle Apps Scriptで使う方法
Google Apps Scriptの日付&時刻ですが、Moment.jsライブラリで、非常に簡単に取り扱えます。今回はライブラリの追加方法とmomentオブジェクトの生成についてお伝えしていきます。

Moment.jsとは何か、またGoogle Apps Scriptでのライブラリ追加方法についてお伝えしました。

さて、今回から本格的に色々なメソッドを紹介していきたいと思います。

まずお伝えするのは、書式についてです。

Google Apps ScriptではUtilities.formatDateというGoogleさんが用意してくれているメソッドがあるのですが、Moment.jsではより簡潔に書式の指定をすることができるんですね。

ということで、Google Apps Script版Moment.jsで日付と時刻の書式フォーマットを指定するformatメソッドの使い方をお伝えしてまいります。

スポンサーリンク

Google Apps Scriptでの日付と時刻のフォーマットの方法

例えば、Dateオブジェクトがありまして、その日時を以下のように表示したいとします。

2020年4月12日 15時25分

日本人ですからね。そういうふうに出力したいときもあるのです。

JavaScript標準でフォーマット

これをJavaScript標準のDateオブジェクトでやろうとすると

function logByDate() {
  const d = new Date('2020/04/12 15:25:00');
  console.log(
    d.getFullYear() + '年' +
    (d.getMonth() + 1) + '月' +
    d.getDate() + '日' + ' ' +
    d.getHours() + '時' +
    d.getMinutes() + '分'
  );  
}

…こんなんなっちゃいます。マジ面倒です。

Utilities.formatDateメソッドを使う

しかし、そこはさすがのGoogleさん。Google Apps ScriptにはUtilities.formatDateという素敵なメソッドがありまして、それを使えば以下のように簡単に書けちゃうんですね。

function logByUtilities() {
  const d = new Date('2020/04/12 15:25:00' );
  console.log(Utilities.formatDate(d, 'JST', 'yyyy年M月d日 H時m分'));
}

Utilities.formatDateメソッドの使い方は以下記事に紹介しています。

GASでチャットワークにGoogleアナリティクスの前日レポートを自動送信
以前、Googleアナリティクスの日次レポートを自動記録する方法をお伝えしましたが、今回はさらに発展をさせてそれをGoogle Apps Scriptを使ってチャットワークに毎朝自動で通知します。

これでもいいのですが、欲を言うと二つほど注文が。

  1. Google Apps Scriptでしか使えないのが気にくわない
  2. ちょっと長い

ワガママのように見えますか?

いえいえ。JavaScriptは色々なところで使える素敵な言語ということで、他でも使える表現のほうが望ましいですよね。

Google Apps関連のAPIであれば専用でも仕方がありませんが、日付のフォーマットも専用って…ということです。

あと、ちょっと長いですね。タイムゾーン…使う場合は便利なんでしょうが、使わないときも多いですし。

ということで、この欲望に応えるべく、Moment.jsを使ってみましょう。

Moment.jsのformatで日付と時刻のフォーマットを指定

では、Moment.jsでの日時フォーマットの指定方法です。formatメソッドを使います。

書き方は

momentオブジェクト.format(書式)

となります。

前述の例では、以下のようにすればいいですね。

function logByMoment() {
  const m = Moment.moment('2020/04/12 15:25:00');
  console.log(m.format('YYYY年M月D日 H時m分'));
}

これでちょっぴり短くなります。

Moment.jsでformatすれば関数いらず

例えば、以下の記事ではGoogleカレンダーを操作しているので、何回もUtilities.formatDateを使うケースがあったんですね。

毎朝、当日の予定をGoogleカレンダーから取得してチャットワークに送る
Google Apps Scriptを使ってチャットワークに色々と送ることができます。Googleカレンダーから当日の予定を取得してチャットワークに送る方法についてお伝えしたいと思います。

毎回、Utilities.formatDateすると、表記がゴチャつくので、独自の関数を用意したりしていました。

まあ、それでもいいっちゃいいのですが。

ただ、Moment.jsのformatメソッドを使うと、以下のように簡潔に記述することができますね。

function formatMoment() {
  const m = Moment.moment();
  console.log(m.format('hh:mm'));
}

Moment.jsでのフォーマットの指定方法

以下、Moment.jsの日時フォーマット指定の際の文字要素とその内容を表にしておきますね。

文字要素 内容
M, MM 月の数字(1 – 12)
MMM, MMMM 月の名前
D, DD
d, dd, ddd, dddd 曜日
YY 2ケタの年数
YYYY 4ケタの年数
a, A AM/PM
H, HH 時間(24時制)
h, hh 時間(12時制)
m, mm
s, ss
SSS ミリ秒

Utilities.formatDateとMoment.jsとで文字要素の指定が異なる

ちょっと聡明な読者はお気づきかと思いますが、Utilities.formatDateの場合と、Moment.jsの場合とで、書式を表現する文字要素が異なっているんですね。

年のトークンが

  • Moment.js:YYYY
  • Utilities.formatDate:yyyy

日のトークンが

  • Moment.js:d
  • Utilities.formatDate:D

といったように別の文字が当てられています。まあ、仕方がないですね。

ですから、どちらか一方だけを使い続けるということになりますね。

まとめ

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

スマートに指定できて気持ちがいいですよね。

Utilities.formatDateには今までお世話になりました。感謝。

さて、Moment.jsですが、まだまだこんなもんではありません。他にも素晴らしい使い方がたくさんあります。

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

Google Apps ScriptのMoment.jsで日時の各要素をGetとSetする方法
Google Apps Scriptで日付&時刻の便利ライブラリMoment.jsを使う方法についてお伝えしています。今回はmomentオブジェクトから各要素を取得する方法、またセットする方法です。

どうぞお楽しみに!

連載目次: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する方法
  4. GAS版Moment.jsライブラリで超簡単に日時の比較をする方法
  5. GASでMoment.jsライブラリを使って簡単に日時の計算をする方法
  6. GAS版Moment.jsの破壊的な日時計算メソッドの注意点とcloneメソッドによる回避
  7. GASでMoment.jsライブラリを使って超スマートに日時の差をとる方法
  8. Google Apps Scriptを使って80歳までの残り時間をChatworkに日々通知する

タイトルとURLをコピーしました