質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

1回答

1379閲覧

【GAS】土日祝かどうかで条件分岐する自動リマインドメール送信ツールを作りたい

T_mari

総合スコア73

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2021/09/24 05:15

プログラミング初学者の事務職GAS使いの者です。
初歩的な質問とは存じますが、お知恵を拝借させて頂きたく投稿いたしました。

前提・実現したいこと

スタンドアロン型のGASで平日と土日祝を判定してリマインドメールが自動送信されるツールを作成しているのですが、
メールを送信するユーザー定義関数の処理に引数の値が入らず、スクリプトが動作せず行き詰まっております。

発生している問題・エラーメッセージ

TypeError: date.getDay is not a function

該当のソースコード

GAS

1//メールを送信する関数 2function sendRemindMail() { 3 const date = Utilities.formatDate(new Date(),"Asia/Tokyo","yyyy/MM/dd"); 4 const weekday_address ="weekday@email.com" ; //平日の送信先アドレス 5 const holiday_address ="holiday@email.com" ; //土日祝の送信先アドレス 6 const subject = "リマインドメール_" + date ;//件名 7 const body = "本日も作業を忘れずにお願いします。" ;//本文 8 if (isHoliday_(date)){//土日祝の場合にtrue処理 9 console.log("土日祝の処理が実行されます"); 10 }else{ 11 console.log("平日の処理が実行されます"); 12 } 13} 14 15//休日かどうかを判定する関数 16function isHoliday_(date) { 17 18 // ①土日の判定 19 const day = date.getDay(); //曜日取得 20 if (day === 0 || day === 6) return true; 21 22 // ②祝日の判定 23 const id = 'ja.japanese#holiday@group.v.calendar.google.com' 24 const cal = CalendarApp.getCalendarById(id); 25 const events = cal.getEventsForDay(date); 26 //なんらかのイベントがある=祝日 27 if (events.length) {return true; 28 }else{ 29 return false; 30 } 31 }

試したこと

個別の関数で引数に日付を入れると想定通りの動作が確認できておりましたので、
date.getDay();
この処理でエラーが発生している(8行目と19行目)と実行ログに記載があったことから、変数dateのスコープに問題があるのかと思い、
関数の外の一番上の行に移してグローバル変数として扱ってみましたが同様のエラーが発生し解決できませんでした。

補足情報

土日祝の判定部分についてはこちらのサイトより引用させていただきました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

引数の値は入ってるけど、Utilities.formatDate で 2021/09/24 という文字列にしたものを渡してるからエラーになってるんでは?

new Date()をそのまま渡してあげれば良いと思います。

投稿2021/09/24 06:17

sawa

総合スコア3002

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

T_mari

2021/09/24 07:58 編集

コメントありがとうございます! ご指摘の通り変数dateのコードを const date = new Date(); に修正し、件名部分に新たにformatの変数を追加修正したところ想定通りの挙動が確認できました。 今後はデータ型を意識するよう心がけます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問