はじめに
最近、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)')