【GAS】日付フォーマットを変更する・文字列に変換する
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日
裏で動いている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オブジェクトのフォーマット変換方法をご紹介しました。