GASでISO 8601形式の時刻表記を出力したかった

技術

この記事は2019年5月24日に書かれたものです。ご注意ください。

Google Apps Scriptこと「GAS」を使っていますか?
私はスプレッドシートと合わせてよく頻繁に使っています。といっても大げさなことはせず、JSONの吐き出しやPOSTでログを保存してる程度ですけど…

で、GASの便利なところはサーバーサイドの処理なので「ほぼ正しい日時」を出力(返らせること)ができるのです(◍ ´꒳` ◍)b
※ほぼ、というのはGASの反応が微妙に遅かったりするので数秒のラグがある。という意です。

んで、日時を出力させるときに私はいつもISO 8601形式で吐き出しているんですよね。

ISO 8601形式の時刻表記例
基本形式 20190518T182831+0900
拡張形式 2019-05-18T18:28:31+09:00

残念ながらJavaScriptではISO 8601形式で出力する機能はないので自前で用意する必要性があります。(※テンプレートリテラルを使ってるのでIE以外で試してね?)

function getDate() {
    const date = new Date();
    const Y = date.getFullYear();
    const M = toDoubleDigits(date.getMonth() + 1);
    const D = toDoubleDigits(date.getDate());
    const h = toDoubleDigits(date.getHours());
    const m = toDoubleDigits(date.getMinutes());
    const s = toDoubleDigits(date.getSeconds());
    const text = `${Y}-${M}-${D}T${h}:${m}:${s}+09:00`;
    return text;
}
function toDoubleDigits(num) {
    const str = String(num);
    if (str.length === 1) return `0${str}`;
    return str;
}
const d = getDate();
console.log(d); // 2019-05-24T11:24:15+09:00

じつに面倒くさいですね。。。(しかもサーバーサイドじゃないからJSTじゃないかもだし、時刻弄ってるかもだし、注意!!(どっかから時刻を取得して、引数で渡せばええんとちゃう?

でもGASだと出力フォーマットを指定して、日時を吐き出せるのです!!(ちなみに今年になって初めて知った。おっそーい)

んでんで、これを利用してISO 8601形式出力させるスクリプトはこうします。

function myFunction() {
    const date = Utilities.formatDate(new Date(), 'Asia/Tokyo', "yyyy-MM-dd'T'HH:mm:ss'+09:00'");
    Logger.log(date); // 2019-05-24T11:13:16+09:00
}

うーん、簡単。
ちなみにこれは全部JST(日本標準時)なんで注意してね♡

追記(2019/05/24 16:00)

JSTでなくてUTCであればJavaScriptでも1行で取得可能です。

const d = new Date().toISOString();
console.log(d); // 2019-05-24T07:03:03.089Z