HRR Co., Ltd.

技術的な記録を残していくことを目的としています。1次情報を大事にしています。

GAS(JavaScript)でよく使う日付フォーマット処理を書きました

はじめに

最近、GAS(Google Apps Script)を使っているのですが、ほぼJavaScriptでして、日付の扱いがちょっと面倒です。
そこで今回、日付をいろんな形式で出力できるフォーマッターを作成しましたので、共有します。

ソースコード

/**
 * 日付のフォーマッター
 * @param {date}   date   dateオブジェクト
 * @param {string} format 書式フォーマット
 */
function formatDate(date, format) {
  format = format.replace(/yyyy/g, date.getFullYear());
  format = format.replace(/mm/g, ('0' + (date.getMonth() + 1)).slice(-2));
  format = format.replace(/dd/g, ('0' + date.getDate()).slice(-2));
  format = format.replace(/aaa/g, ['日','月','火','水','木','金','土'][date.getDay()])
  format = format.replace(/AAA/g, ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'][date.getDay()])
  format = format.replace(/HH/g, ('0' + date.getHours()).slice(-2));
  format = format.replace(/MM/g, ('0' + date.getMinutes()).slice(-2));
  format = format.replace(/ss/g, ('0' + date.getSeconds()).slice(-2));
  format = format.replace(/SSS/g, ('00' + date.getMilliseconds()).slice(-3));

  return format;
};

これをテスト実行してみます。

/**
 * テスト実行
 */
function sample() {
  var dateObj = new Date();
  Logger.log(formatDate(dateObj, 'yyyy/mm/dd(AAA) HH:MM:ss.SSS'));
}

このsampleを実行すると、こんな出力になります。
スクリプトエディタの「表示」→「ログ」、またはCtrl + Enterでも表示できます。

[18-06-10 08:33:00:835 JST] 2018/06/10(Sun) 08:33:00.833

解説

メインの方

date.getMonth() 

は 0 - 11 の数字が返るので、+1しなくてはなりません。

date.getDay()

は曜日を取得しますが、こちらは0 - 6 (日、月、…土)で返るので、こちらも変換しなくてはなりません。
['日','月','火','水','木','金','土']という配列を作って、要素部分に date.getDay() を当てはめれば、曜日が取得できます。

もう少し丁寧に書くならこんな感じです。

var dayOfWeekList = ['日','月','火','水','木','金','土'];
var dayOfWeek = dayOfWeekList[date.getDay()];

テスト実行の方

new Date();

は引数なしなので、今現在の日時になります。

Logger.log();

を実行することで、スクリプトエディタの「表示」→「ログ」にログが残ります。
Ctrl + Enterでも表示できます。

formatDate(dateObj, 'yyyy/mm/dd(AAA) HH:MM:ss.SSS')

formatDate関数は、ただ文字列を置換しているだけなので、取得したい情報を文字列で指定するだけです。
日本語風に取得したければ、こんな感じでしょうか。

formatDate(dateObj, 'yyyy年mm月dd日(aaa)')

おわりに

JavaScriptで日付の処理を書くときに、毎回忘れているので、まとめることにしました。
記事にしたことで、忘れないといいな…

以上でした。