GASで日付操作ライブラリ「Day.js」を使う(Moment.js代替)

GASで日付操作ライブラリ「Day.js」を使う(Moment.js代替)

GASで日付を操作するときに、Dateオブジェクトの標準インタフェースでは使い勝手が悪いケースも多いです。

そこで、この記事では、GASで、日付操作ライブラリ「Day.js」を使う方法を紹介します。

GASで使える日付操作ライブラリとして、よく使われる「Moment.js」は、サポート打ち切りが予定されています。「Day.js」は、操作方法が「Moment.js」とほとんど同じ(らしい)ので、乗り換え先としても最適です。

利用環境を整える:ライブラリを追加する

メニューから「リソース」→「ライブラリ」を選びます。

図書館(=たぶん「ライブラリ」の直訳)ウィンドウが表示されるので、「Add a Library」欄に次のように入力して「追加」をクリックしてください。

M-XE7CrmxlWCGGPvq5NTiXhjpm1hkg_vC

バージョン欄で、最新のバージョンを選んでください。

下記キャプチャでは「2 v1.9.3(no plugin)」を選択していますが、それより新しいバージョンがあれば、(下記の画面とは違っても構いませんので)最新のバージョンを選んでください

※2020/10/15 16:23(注)現時点での最新版は「3 v1.9.3(add ja locale)」です。

その後、保存をクリックしてください。

これで、設定完了です。

実際に使ってみる

それでは、実際に使ってみましょう。

現在の日付・時刻を取得する

const d1 = dayjs.dayjs();

dayjsのfunctionを呼び出すときには「dayjs.dayjs()」のように、最初に「dayjs.」を付ける必要があります。

dateオブジェクトからdayjsオブジェクトを作る

const d2 = dayjs.dayjs(new Date(2020, 0, 1));

「dayjs.dayjs()」の引数にDateオブジェクトを入れると、dayjsオブジェクトを生成できます。

dayjsオブジェクトを、書式を指定して表示する

const d3 = dayjs.dayjs(new Date(2020, 0, 1));
Logger.log(d3.format('YYYY-MM-DD'));
// 2020-01-01

dayjsオブジェクトのformatメソッドを使うと、dayjsオブジェクトの内容を、書式を指定して表示することができます。

dayjsオブジェクトの年・月・日の取得

const d4 = dayjs.dayjs(new Date(2020, 0, 1));

Logger.log(d4.year() );  //2020.0
Logger.log(d4.month() ); //   0.0(月は0~11で表される) 
Logger.log(d4.date() );  //   1.0

dayjsオブジェクトのyear、month、dateメソッドを使うと、それぞれ年・月・日を取得できます。

なお、上の例では書きませんでしたが、hourメソッド、minuteメソッド、secondメソッドを使うと時・分・秒も取得できます。

dayjsオブジェクトの年・月・日の指定

const d5 = dayjs.dayjs(new Date(2020, 0, 1));
const d6 = d5.year(2021).month(2).date(4);

Logger.log(d5.format('YYYY-MM-DD')); 
//2021-01-01

Logger.log(d6.format('YYYY-MM-DD')); 
//2021-03-04

dayjsオブジェクトのyearメソッド、monthメソッド、dateメソッドで年・月・日を指定することができます。

なお、次の2点に注意してください。

  • Dateオブジェクトと同じように、monthメソッドで指定する月は「0~11」の範囲内で指定する
  • addメソッドやsubtractメソッドを使っても、元の変数(今回の例では「d5」)の値は変わらない

上の例では書きませんでしたが、hourメソッド、minuteメソッド、secondメソッドを使うと、時・分・秒も設定できます。

dayjsオブジェクトの年・月・日を変化させる

const d7 = dayjs.dayjs(new Date(2020, 0, 31));
const d8 = d7.add(2, 'year').add(2, 'month').subtract(4, 'day');

Logger.log(d7.format('YYYY-MM-DD'));
// 2020-01-31

Logger.log(d8.format('YYYY-MM-DD'));
// 2022-03-28

dayjsオブジェクトの、addメソッドやsubtractメソッドをメソッドチェインの形で使うことで、年・月・日を変化させることができます(もちろん、同じようにして時・分・秒も変化させることができます)。

なお、addメソッドやsubtractメソッドを使っても、元の変数(今回の例では「d7」)の値は変わりません

dayjsオブジェクトからDateオブジェクトを取得

const d9 = dayjs.dayjs(new Date(2020, 0, 1));
const date9 = d9.toDate();

Logger.log(date9);
//Wed Jan 01 00:00:00 GMT+09:00 2020

dayjsオブジェクトのtoDateメソッドで、Dateオブジェクトを取得できます。

個別の命令文ごとにロケール(ja)を設定

const d10 = dayjs.dayjs(new Date(2020, 0, 1));
Logger.log(d10.locale('ja').format('YYYY-MM-DD dddd'));
//2020-01-01 水曜日

今回のライブラリでは、「ja」ロケールだけ設定することができます

dayjsオブジェクトに対して、「locale('ja')」メソッドを実行することで、そのオブジェクトに対する操作だけロケールを変更することができます。

上記の例では、ロケールを「ja」に設定したことで、曜日が日本語で表示されています。

全体的なロケール(ja)の設定

const d11 = dayjs.dayjs(new Date(2020, 0, 1));
Logger.log(d11.format('YYYY-MM-DD dddd'));
//2020-01-01 Wednesday

dayjs.dayjs.locale('ja');
const d12 = dayjs.dayjs(new Date(2020, 0, 1));
Logger.log(d12.format('YYYY-MM-DD dddd'));
//2020-01-01 水曜日

今後行うすべての操作にlocaleを設定する場合には「dayjs.dayjs.locale('ja');」と入力してください。

その行の後に作成する、すべてのオブジェクトに対して「ja」ロケールが適用されます。

Clasp環境用、Typescriptの型定義ファイル

Clasp環境で使えるTypeScriptの型定義ファイルは、下記からダウンロードできます。

m-haketa/gas_dayjs_usertest/@types/dayjs.d.ts

Clasp環境での、関数名・メソッド名の自動補完にお使いください。

注意点

  1. Ver 2時点では、プラグインは使えません。標準機能のみご使用ください
  2. Ver 3以降では「ja」ロケールを指定できますが、他のロケールは指定できません
  3. GASの標準エディタ上では関数名・メソッド名の補完はできません