GASの日付を文字列フォーマットに変換する方法(formatDateメソッド)
Google Apps Script(GAS)で日付のデータをそのまま表示しようとすると、本来表示したい日付の形式で表示されない場合があります。
日付を表示したい形式にして、文字列として表示できるように変換するメソッド「Utilities.formatDate」の使い方とサンプルコードを解説します。
Google Apps Scriptの日付はDateクラス
Google Apps Script(GAS)で日付情報を扱う場合は、Dateクラスを用いて表現します。
let (変数名) = new date(年, 月, 日);
Dateクラスを変数として扱えるようにするために、newでオブジェクトを宣言します。
Dateオブジェクトの宣言の際には引数で設定したい年/月/日の情報を指定します。
let today = new date();
引数を指定しない場合は、実行した当日の日時が設定されます。
上記の1行のスクリプトでは実行した当日の日付をtodayという名前の変数に格納します。
Date型は文字列になると特殊な表示形式に
しかし、Date型のオブジェクトをログ出力などで文字列として表示しようとすると、見慣れぬ日付形式で表示されます。
ログ出力結果:Tue Aug 18 22:18:58 GMT+09:00 2020
プログラム内部で保持している日付の形式であるため、人間が見たときには見づらい形式で表示されるのがネックです。
Utilities.formatDateで日付を表示したい形式の文字列に変換
日付を我々が馴染みのある「yyyy/MM/dd」や「yyyy年MM月dd日」といった形式したい場合にはどうすればよいのでしょうか。
Google Apps Script(GAS)では日付の表示形式を設定するUtilities.formatDateメソッドが用意されています。
Utilities.formatDate(date, timeZone, format)
例えば、先程のDateオブジェクトのtoday変数の表示を「yyyy年MM月dd日」に変換する場合は以下のようにコードを記述します。
today = Utilities.formatDate(today,"JST", “yyyy年MM月dd");
Utilities.formatDateによって、表示したい形式の文字列に変換することができます。
さらに時刻も含めた形で変換したい場合は、以下のように記述します。
today = Utilities.formatDate(today,"JST", “yyyy/MM/dd hh:mm:ss");
月を表すMonthの場合は大文字のM、分を表すMinutesの場合は小文字mにする必要があります。
GASのformatDateメソッドの使い方とサンプルコード
実際にGoogle Apps Script(GAS)でUtilities.formatDateを使い、日付を表示したい形式の文字列に変換するサンプルコードを紹介したいと思います。
function myFunction() {
//実行した日付のオブジェクトをtoday変数に格納する
let today = new Date();
//Dateオブジェクトのtoday変数をログ出力する
Logger.log(today);
//formatDateメソッドで日付の表示形式を変換する
today = Utilities.formatDate(today, "JST", "yyyy/MM/dd");
//formatDateメソッドで変換後をログ出力する
Logger.log(today);
}
※サンプルコードの画像ではYYYY/MM/ddですが、実際のコードはyyyy/MM/ddをお使いください。
このスクリプトを実行すると、「2020/08/18」という表示したかった日付形式の文字列としてログ出力できます。
このようにすれば、スプレッドシートに日付を出力した際にも、利用者にも見やすいフォーマットになります。
まとめ・終わりに
今回、Google Apps Script(GAS)で日付を文字列として表示する方法を解説しました。
日付情報はDateクラスから生成しますが、そのままログ出力すると見慣れない日付形式で表示されてしまいます。
そこで、Utilities.formatDateメソッドを使うことで「yyyy/MM/dd」や「yyyy年MM月dd日」といった表示したい日付形式に変換した上で文字列として出力可能になります。
GASで日付情報を出力する場合には、formatDateメソッドを活用して見せたい形式に変換し、文字列として出力しましょう。
※Google App Scriptでの文字列の各種処理・操作方法は以下の記事でまとめています。
ディスカッション
コメント一覧
年のフォーマット文字はYYYYではなくyyyyです。
YYYYだと正常な年がでない事があります。
(私はこれではまりました)
https://stackoverrun.com/ja/q/13124839
QP80さま
ご指摘ありがとうございます。
こちら動作確認させていただきました。
通常時だと問題ないものの、年が変わる12月31日~1月1日だと年がうまく切り替わらないケースがあるようですね。
記事ではそうした場合も対応できるyyyyに修正させていただきました。
ご教示ありがとうございました。