前提・実現したいこと
GASについてです。
googleカレンダーから2週間分の空き時間を算出したいです。
そのデータをスプレットシートを介さず、直接googleフォームの記述欄の方に出力したいと考えています。
2週間分の空き時間は、9時から18時の間で考えております。
現在予定がある時間を15分単位で取得しており、
9時から18時の時間も15分単位で取得しているところです。
indexOfやmatchを用いて空き時間を出力する作業に詰まっています。
自分の憶測でコードを書いているため無駄なコードも多いかと思いますが
よろしくお願いいたします。
発生している問題・エラーメッセージ
allList_01が全てログに出てくる
該当のソースコード
JavaScript
1 2function all_event() { 3 var myCal=CalendarApp.getCalendarById('ID'); //特定のIDのカレンダーを取得 4 var dt = new Date(); //当日指定 5 var date = dt.setDate(dt.getDate() + 2); //当日から2日後からイベント日程を取得 6 var startDate = new Date(date); //取得開始日 7 var dtt = dt.setDate(dt.getDate() + 14); //2週間後の14日後まで取得 8 var endDate = new Date(dtt);//取得終了日 9 10 var myEvents=myCal.getEvents(startDate,endDate); //カレンダーのイベントを取得 11 12 13//カレンダーに入っている予定の時間を15分単位で取得する 14 15 var ngList = []; 16 for (var i in myEvents) { 17 var startTime = myEvents[i].getStartTime(); 18 var endTime = myEvents[i].getEndTime(); 19 var diffCount = (((endTime -startTime)/60)/1000)/15; 20 21 22 var startTime2 = startTime.setMinutes(startTime.getMinutes() -15); 23 var startTime3 = new Date(startTime2); 24 25 for(j=0;j < diffCount+1;j++){ 26 var ng1 = startTime3.setMinutes(startTime3.getMinutes() +15); 27 var ng2 = new Date(ng1); 28 ngList.push(ng2); 29 }; 30 }; 31 32 33 34//配列を用意して2週間分の時間を入れる。 35 36 37 var allList =[]; //この配列に入っている時間から空き時間を下記に出力したいです。 38 { 39 for (var i = 0; i < 24; i++) { 40 startDate.setDate(startDate.getDate() + 1); 41 42//9時から18時までの空き時間をフォームに出力したいので9時から18時にイベントを固定 43 var start_Time = startDate.setHours(9, 0, 0, 0); 44 var s_Time = new Date(start_Time); 45 var end_Time = startDate.setHours(18, 0, 0, 0); 46 var e_Time =new Date(end_Time); 47 48//予定と同様に15分単位にする 49 var diffCount = ((((e_Time - s_Time)/60)/1000)/15); 50 var TimeList = s_Time.setMinutes(s_Time.getMinutes() -15); 51 var TimeList1 = new Date(TimeList); 52 53 for(j=0;j < diffCount+1;j++){ 54 var gf1 = TimeList1.setMinutes(TimeList1.getMinutes() +15); 55 var gf2 = new Date(gf1); 56 allList.push(gf2); 57 }; 58 }; 59 }; 60 61 62 //配列を文字列に変える 63 64 var ngList_01 = ngList.join(','); 65 66 var allList_01 = allList.join(','); 67 68 69 70 //配列を一つにする 71 72 var shin = []; 73 74 shin[0] = ngList_01 75 shin[0] = allList_01 76 77 78 //予定時間と日程の時間が15分単位で固定されているため引く 79 80 81var result = shin.filter( function( time, index, array ) { 82 83 //インデックス番号を比較して重複データのみ排除 84 return array.indexOf(time) === index; 85 86}) 87 88Logger.log(result); 89 90//フォームへの出力はその後に書く予定です 91 92}; 93 94} 95 96 97
補足情報(FW/ツールのバージョンなど)
mac

回答1件
あなたの回答
tips
プレビュー