実現したいこと
Googleフォームでのラジオボタンでの選択肢(日付)を自動更新したい。
前提
GoogleフォームのGASである質問(ラジオボタン)の選択肢が日付で
(例)「6月27日(火)~7月4日(月)」
のように
現在の3週間前から未来の5週間後までの
火曜日から月曜日までの日にちを毎朝の自動更新したいのですが…
トリガーで毎朝7~8時更新にしているのですが、
更新されると…
(例)「6/26日(水)~7/3(月)」
のように
・日にちが1日前にズレる
・曜日表示が火~月ではなくなる
等のエラーが必ず起きます。
毎朝7~8時更新トリガーで
正しく日付と曜日を自動更新したいです。
お力をお貸しください。
宜しくお願いします。
発生している問題
・(例)「6/26日(水)~7/3(月)」のように日にちが1日前にズレる
・(例)「6/26日(水)~7/3(月)」のように曜日表記が変になる
該当のソースコード
GAS
1function updateFormRadio() { 2 var formUrl = "フォームのURL"; 3 var targetQuestionTitle = "シフトの期間を選んでください"; // 対象の質問のタイトルを指定 4 5 var form = FormApp.openByUrl(formUrl); 6 var items = form.getItems(FormApp.ItemType.MULTIPLE_CHOICE); 7 8 for (var i = 0; i < items.length; i++) { 9 var item = items[i]; 10 var itemTitle = item.getTitle(); 11 12 if (itemTitle === targetQuestionTitle) { 13 var currentDate = new Date(); 14 var currentDay = currentDate.getDay(); // 現在の曜日を取得 15 16 var startWeek = new Date(currentDate); 17 startWeek.setDate(startWeek.getDate() - (7 * 3)); // 3週間前の日付 18 startWeek = getTuesdayOfWeek(startWeek); // 火曜日の日付に調整 19 20 var endWeek = new Date(currentDate); 21 endWeek.setDate(endWeek.getDate() + (7 * 5)); // 5週間後の日付 22 endWeek = getMondayOfWeek(endWeek); // 月曜日の日付に調整 23 24 var tuesdays = []; 25 var currentWeek = new Date(startWeek); 26 27 while (currentWeek <= endWeek) { 28 tuesdays.push(new Date(currentWeek)); 29 currentWeek.setDate(currentWeek.getDate() + 7); // 週を1週ずつずらす 30 } 31 32 if (tuesdays.length === 0) { 33 throw new Error("期間が見つかりませんでした。"); 34 } 35 36 var dateStrings = tuesdays.map(function(tuesday) { 37 var startDate = new Date(tuesday); 38 var endDate = new Date(tuesday); 39 endDate.setDate(endDate.getDate() + 6); // 開始日から6日後を終了日とする 40 var startDateString = Utilities.formatDate(startDate, "GMT", "yyyy/MM/dd"); 41 var endDateString = Utilities.formatDate(endDate, "GMT", "MM/dd"); 42 var dayOfWeekString = getDayOfWeekString(currentDay); // 曜日の表記を取得 43 return startDateString + "(" + dayOfWeekString + ")~" + endDateString + "(月)"; 44 }); 45 46 if (item.getType() === FormApp.ItemType.MULTIPLE_CHOICE) { 47 var question = item.asMultipleChoiceItem(); 48 question.setChoiceValues(dateStrings); 49 } else { 50 throw new Error("対象の質問が複数選択式ではありません。"); 51 } 52 break; 53 } 54 } 55} 56 57// 指定された日付の火曜日を取得する関数 58function getTuesdayOfWeek(date) { 59 var day = date.getDay(); 60 var diff = (day < 2) ? 2 - day : 9 - day; 61 date.setDate(date.getDate() + diff); 62 return date; 63} 64 65// 指定された日付の月曜日を取得する関数 66function getMondayOfWeek(date) { 67 var day = date.getDay(); 68 var diff = (day < 1) ? 1 - day : 8 - day; 69 date.setDate(date.getDate() + diff); 70 return date; 71} 72 73// 曜日の表記を取得する関数 74function getDayOfWeekString(day) { 75 var daysOfWeek = ["日", "月", "火", "水", "木", "金", "土"]; 76 return daysOfWeek[day]; 77} 78 79
試したこと
毎分更新にして試したが(昼過ぎ)、ズレることはなく
毎朝更新にすると必ずズレる

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/06/22 03:33
2023/06/25 23:11