Google 양식에 작성된 날짜를 GAS로 처리하기 위한 비망록

Google 양식을 만들 때 날짜 입력란을 입력할 수 있습니다.


면담이나 MTG를 개최하기 위해 열거한 후보일에 대해, 자신의 Google Calendar에서 일정이 들어 있는지 확인하는 스크립트를 Google Apps Script(이하, GAS)로 작성했습니다. 이 기사는 날짜를 다루는 방법에 관한 비망록입니다.
(주) Google Form에 관한 정보는 생략합니다.

Google Form의 콘텐츠 가져오기



Google Form에서 작성한 내용은 GAS에서 다음과 같이 얻을 수 있습니다.
자세한 내용은 이 기사를 참조하십시오.
Googleform에서 slack 알림 설정 방법
var itemResponse = e.response.getItemResponses();
for (var j = 0; j < itemResponse.length; j++){    
  var formData = itemResponse[j];
  var title = formData.getItem().getTitle();
  var response = formData.getResponse();
  switch (title) {
    case "氏名":
      name = response;
      break;
    case "メールアドレス":
      mailaddress = response;
      break;
    // 略 //
    default:
      break;
  }
}

이 때, 취득되는 일자·시간은 GAS상에서는 문자열 취급이 됩니다.
이대로 캘린더의 함수에 대입해도 날짜로서 인식되지 않습니다. 변환해야합니다.

Data 객체로 변환



시작하기 전에 획득한 날짜와 시간이 GAS에서 어떻게 출력되는지 확인합니다.Logger.log() 에 일시대입하면 다음과 같이 출력됩니다.

날짜: 2021-01-12
시간: 13:00

날짜는 -이고 시간은 :로 연결되어 있음을 알 수 있습니다.
이 문자열을 그대로 Date 개체에 넣을 수는 있지만 CalendarApp은 날짜로 처리할 수 없습니다.
(invalid~ 라는 에러가 나올 것입니다.)

조사해 보면, Date 객체로 포맷에 따라서는 변환할 수 없는 것이 있는 것 같습니다.
(참고: Google Apps Script 날짜 문자열 변환 )
다음 형식과 일치하도록 스크립트에서 조정합니다.

2021-01-12T13:00:00.000"

그런 다음 Date 객체에 할당합니다.

var date= new Date("2021-01-12T13:00:00.000");

주의



출력한 시간이 의도하지 않은 경우 스크립트의 시간대가 Asia/Tokyo가 아닐 수 있습니다.
이 경우 appsscript.json라는 파일에 나열된 표준 시간대를 Asia/Tokyo로 변경합니다.appsscript.json 는 프로젝트 설정에서 「appsscript.json」マニフェスト ファイルをエディタで表示する 를 체크하면 표시됩니다.

체크 후, 다음과 같이 변경하면 문제 없습니다.

참고 : Google Apps Script에서 날짜의 시간대를 일본으로 수정하는 방법

CalendarApp



Google 캘린더를 GAS로 처리할 때 일부 스크립트를 소개합니다.
공식 사이트

첫째, 일정을 설명하는 나열된 일정을 검색하는 캘린더의 ID를 가져옵니다.
캘린더 ID는 설정 > 캘린더 통합에 있습니다.

getCalendarById 를 사용합니다.
var cals = CalendarApp.getCalendarById("Calendar ID");

이곳은 첫 번째 희망, 두 번째 희망과 차례로 일정이 들어 있는지 확인하고, 그렇지 않으면 일정을 추가하는 스크립트입니다.
Google 캘린더에 포함된 약속을 얻으려면 getEvents()를 사용하고 약속을 추가하려면 createEvent()를 사용합니다.
for(var i=0; i < candidate_days.length; i++){ 
  //Dateオブジェクトに変換
  var start_date= new Date(candidate_days[i]+"T"+candidate_start_time+":00.000");
  var end_date= new Date(candidate_days[i]+"T"+candidate_end_time+":00.000");

  // 先約があるかどうか調べる
  if(cals.getEvents(start_date, end_date).length==0){
    //予約情報をカレンダーに追加
    var thing = name+"さん 面談予約";
    var event = cals.createEvent(thing, start_date, end_date);
    break
  } else {
    var res = name+"さん 第"+(i+1)+"希望に先約がありました。";
    Logger.log(res);
  }
}

선약이 없으면 다음과 같이 약속이 추가됩니다.


참고


  • 【GAS】Google Form + SpreadSheet로 만드는 예약 시스템을 만들어 보았다 간단하네요. 【Google App Script】
  • 【GAS】2개의 createEvent 메소드를 완전 마스터
  • 【GAS】getEvents 메소드를 완전 마스터
  • 좋은 웹페이지 즐겨찾기