【GAS】日付フォーマットを変更する・文字列に変換する

GASDate,formatDate,toString

Dateオブジェクトのフォーマット変換方法をご紹介します。

日付のフォーマット形式を変える(Utilities.formatDateメソッド)

日付オブジェクトのフォーマットはデフォルトのままのログを出すと下記のようなフォーマットで表示されます。分からなくはないですが、他のフォーマットに慣れている私たちには少し読み取りづらいですね。

Sat Oct 12 2019 09:36:55 GMT+0900 (Japan Standard Time)

そこで指定の日付フォーマット形式に変換してくれるのがUtilitiesクラス*のformatDateメソッドです。
*Utilitiesクラスは、文字列のエンコード/デコード、日付形式、JSON 操作などのさまざまなタスク向けのユーティリティです。

基本構文

Utilities.formatDate(date, timeZone, format)

  • date(必須):Dateオブジェクト
  • timeZone(必須):タイムゾーン(日本時間であれば「’JST’」(Japan Standard Time)を指定)
  • format(必須):表示させたいフォーマット形式(SimpleDateFormat 仕様に基づく形式)
  let today = new Date();
  console.log(Utilities.formatDate(today, 'JST', 'yyyy-MM-dd')); //2022/08/19

指定できるフォーマット形式一覧

フォーマット表示【2019/10/12 09:36:55 (JST)】の場合
yyyy年(西暦4桁)2019
yy年(西暦2桁)19
M月(数字1桁~2桁)10
MM月(数字2桁)10
MMM月(英語短縮)Oct
MMMM月(英語)October
d日(数字1桁~2桁)12
dd日(数字2桁)12
E曜日(短縮英語)Sat
EEEE曜日(英語)Saturday
u曜日(数字0~6)
・0:日曜日
・6:土曜日
6
F第〇曜日(数字)2
a午前/午後AM
h時(1時~12時表記、数字1桁~2桁)9
hh時(1時~12時表記、数字2桁)09
K時(0時~11時表記、数字1桁~2桁)9
KK時(0時~11時表記、数字2桁)09
k時(1時~24時表記、数字1桁~2桁)9
kk時(1時~24時表記、数字2桁)09
H時(0時~23時表記、数字1桁~2桁)9
HH時(0時~23時表記、数字2桁)09
m分(数字1桁~2桁)36
mm分(数字2桁)36
s秒(数字1桁~2桁)55
ss秒(数字2桁)55
zタイムゾーン(短縮英語)JST
zzzzタイムゾーン(英語)Japan Standard Time
Zタイムゾーン(数字)+0900

いろいろな日付・時刻表記

よくある日付表記方法をご紹介します。

yyyy/MM/dd、yyyy-MM-dd、yyyy年MM月dd日

  let d = new Date('2019/10/12 09:36:55');

  console.log(Utilities.formatDate(d, 'Asia/Tokyo', 'yyyy/MM/dd')); //2019/10/12
  console.log(Utilities.formatDate(d, 'Asia/Tokyo', 'yyyy-MM-dd')); //2019-10-12
  console.log(Utilities.formatDate(d, 'Asia/Tokyo', 'yyyy年MM月dd日')); //2019年10月12日
「mm」と「MM」

裏で動いているJava SE SimpleDateFormatクラスにおいて、「mm」は「分」を表します。そのため、’yyyy/mm/dd’と指定指定してしまうと実際には「年/分/日」になってしまうので気を付けてください。

HH:mm:ss、HH時mm分ss秒

  let d = new Date('2019/10/12 18:36:55');

  console.log(Utilities.formatDate(d, 'Asia/Tokyo', 'HH:mm:ss')); //18:36:55
  console.log(Utilities.formatDate(d, 'Asia/Tokyo', 'HH時mm分ss秒')); //18時36分55秒

12時間 AM・PM表記 / 24時間表記

24時間の場合は「H」「HH」、12時間の場合は「K」または「KK」を使います。12時間表記(K or KK)の時はAM・PMと組み合わせる必要があるので、AM・PM表記の「a」と合わせて使いましょう。

下記は1桁~2桁表示の場合(H / K)で24時間表記と12時間表記の例です。

  let d = new Date('2019/10/12 18:36:55');

  //24時間表記
  console.log(Utilities.formatDate(d, 'Asia/Tokyo', 'H:mm')); //18:36

  //12時間表記 & AM・PM表記
  console.log(Utilities.formatDate(d, 'Asia/Tokyo', 'a K:mm')); //PM 6:36

曜日の日本語表記

Dateクラスの曜日取得については、Dateクラスに対して直接呼び出す取得メソッドのgetDate()は0~6の数字、UtilitiesクラスのformatDateメソッドで変換しても、英語、英語短縮、数字でしか表示ができずデフォルトでは日本語表示ができません。

let d_0 = new Date('2019/10/13');

  console.log(d_0.getDay()); // 0
 console.log(Utilities.formatDate(d_0, 'Asia/Tokyo', 'yyyy/MM/dd (E)')); //2019/10/13 (Sun)

少し手間ですが、<数字→日本語表記>または<英語→日本語>に変換するための、対応マスタを持つ関数を用意するのが手っ取り早いでしょう。

例えば、下記ではDateクラスの変数を引数として渡すと日本語の曜日を返してくれる関数getJPDayを作成して変換しています。

function getJPDay(date){

  days = {
    0:'日',
    1:'月',
    2:'火',
    3:'水',
    4:'木',
    5:'金',
    6:'土',
  };

  return days[date.getDay()];
}

function myFunction() {
  let d_0 = new Date('2019/10/13');
  let d_1 = new Date('2019/10/14');
  let d_2 = new Date('2019/10/15');
  let d_3 = new Date('2019/10/16');
  let d_4 = new Date('2019/10/17');
  let d_5 = new Date('2019/10/18');
  let d_6 = new Date('2019/10/19');

  console.log(Utilities.formatDate(d_0, 'Asia/Tokyo', 'yyyy/MM/dd (E)')); //2019/10/13 (Sun)
  console.log(Utilities.formatDate(d_1, 'Asia/Tokyo', 'yyyy/MM/dd (E)')); //2019/10/14 (Mon)
  console.log(Utilities.formatDate(d_2, 'Asia/Tokyo', 'yyyy/MM/dd (E)')); //2019/10/15 (Tue)
  console.log(Utilities.formatDate(d_3, 'Asia/Tokyo', 'yyyy/MM/dd (E)')); //2019/10/16 (Wed)
  console.log(Utilities.formatDate(d_4, 'Asia/Tokyo', 'yyyy/MM/dd (E)')); //2019/10/17 (Thu)
  console.log(Utilities.formatDate(d_5, 'Asia/Tokyo', 'yyyy/MM/dd (E)')); //2019/10/18 (Fri)
  console.log(Utilities.formatDate(d_6, 'Asia/Tokyo', 'yyyy/MM/dd (E)')); //2019/10/19 (Sat)

  console.log(Utilities.formatDate(d_0, 'Asia/Tokyo', 'yyyy/MM/dd')+`(${getJPDay(d_0)})`); //2019/10/13(日)
  console.log(Utilities.formatDate(d_1, 'Asia/Tokyo', 'yyyy/MM/dd')+`(${getJPDay(d_1)})`); //2019/10/14(月)
  console.log(Utilities.formatDate(d_2, 'Asia/Tokyo', 'yyyy/MM/dd')+`(${getJPDay(d_2)})`); //2019/10/15(火)
  console.log(Utilities.formatDate(d_3, 'Asia/Tokyo', 'yyyy/MM/dd')+`(${getJPDay(d_3)})`); //2019/10/16(水)
  console.log(Utilities.formatDate(d_4, 'Asia/Tokyo', 'yyyy/MM/dd')+`(${getJPDay(d_4)})`); //2019/10/17(木)
  console.log(Utilities.formatDate(d_5, 'Asia/Tokyo', 'yyyy/MM/dd')+`(${getJPDay(d_5)})`); //2019/10/18(金)
  console.log(Utilities.formatDate(d_6, 'Asia/Tokyo', 'yyyy/MM/dd')+`(${getJPDay(d_6)})`); //2019/10/19(土)

}

日付を文字列に変換する(toStringメソッド)

日付表記のまま、日付型(Dateオブジェクト)から文字列型(Stringオブジェクト)に変更したいこともあると思います。toStringメソッドでDataオブジェクトを文字列オブジェクトに変換できます。

基本構文

Data.toString()

  let dt = new Date('2019/10/13 19:23:59');

  console.log(dt) //Sun Oct 13 2019 19:23:59 GMT+0900 (Japan Standard Time)
  console.log(typeof dt) //object

  console.log(dt.toString()) //	Sun Oct 13 2019 19:23:59 GMT+0900 (Japan Standard Time)
  console.log(typeof dt.toString()) // string

指定フォーマット形式で文字列に変換する

yyyymmdd形式やyyyymm形式のまま文字列に変換したい場合は、上述したUtilitiesクラスのformatDateメソッドで形式変更後にtoStringメソッドを適応します。

  let dt = new Date('2019/10/13 19:23:59');

  console.log(Utilities.formatDate(dt, 'Asia/Tokyo', 'yyyy/MM/dd')) //	2019/10/13
  console.log(Utilities.formatDate(dt, 'Asia/Tokyo', 'yyyy/MM/dd').toString()) // 	2019/10/13
  console.log(typeof Utilities.formatDate(dt, 'Asia/Tokyo', 'yyyy/MM/dd').toString()) // string

まとめ

Dateオブジェクトのフォーマット変換方法をご紹介しました。

この記事を書いた人

てつお
広告代理店出身、事業会社でWebマーケティングや開発の仕事をしている26歳です。プロフィール詳細はこちら
■Google広告認定資格|Google アナリティクス個人認定資格(GAIQ)|TOEIC920点