[GAS]Googleフォームで入力した時刻をスプレッドシートから取得したら1899/12/30になってしまう話

GAS
const time_from_form = sheet.getRange("A1").getValue(); //スプレッドシートから取得した時刻の値とする
if(time_from_form.match('\Sat Dec 30 1899*\') != null) {
  const temp_time = new Date(time_from_form); //この時点だと"Sat Dec 30 1899 13:30:00 GMT+0900 (Japan Standard Time)"
  const time = Utilities.formatDate(temp_time, "JST", "HH:mm");
  console.log(time); //13:30
}

Googleフォーム便利ですよね。
Googleフォームの回答をスプレッドシートに自動で書き込んでくれる機能は、GASを使った自動化をとても便利にしてくれます。

フォームの中には時間を入力させる型があるのですが、その回答がスプレッドシートに入力されると、日付型(HH:mm)になります。
ところが、GASでそのセルを取得すると”Sat Dec 30 1899 00:00:00 GMT+0900 (Japan Standard Time)”という値が取得されます。

つまり、フォームから13:30と回答された値をスプレッドシートからGASで取得すると、
“Sat Dec 30 1899 13:30:00 GMT+0900 (Japan Standard Time)”
と取得されてしまうわけですね。

これをそのままメールに載っけてもいいのですが、見づらい。
なので、formatDateで形を整えます。
しかし、フォームの中には日付型も混じっているとします。
そうした時にmatchで”Sat Dec 30 1899″と一致するDate型だけひっかければ時刻だけちゃんとフォーマットを整えられるということです。

というのが一番上のコードです。
時刻はスプレッドシートの仕様が変わらない限り1899/12/30(土)から始まるので、汎用的に使える処理だと思います。

コメント

タイトルとURLをコピーしました