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

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

新規登録して質問してみよう
ただいま回答率
85.46%
プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

解決済

1回答

2176閲覧

GASでGoogleカレンダからSlackへの通知で土日だけ除く方法

narururu

総合スコア172

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

0クリップ

投稿2020/04/02 13:44

編集2020/04/03 14:36

◆解決したい課題

GASでGoogleカレンダからSlackへの通知で土日だけ除きたい。
一方、平日は以下の出力が得られるようにしたい。

【本日、以下のメンバがお休み】 XXお休み XX年休

◆コード

function isWorkday (targetDate) { // targetDate の曜日を確認、週末は休む (false) var rest_or_work = ["REST","mon","tue","wed","thu","fri","REST"]; // 日〜土 if ( rest_or_work [targetDate.getDay ()] == "REST" ) { return false; }; // 当てはまらなければ営業日 (True) return true; } const getCalendar = () => { const calendarId = "xxxxxx"; const calendar = CalendarApp.getCalendarById(calendarId); //const now = new Date(); // debug のために任意の日付を仕込む (year,month-1,day) today = new Date (2020, 5, 2); const leaveEvents = calendar.getEventsForDay(today).map(e=>e.getTitle()).filter(e=>e.indexOf("休") !== -1).join("\n");  if (isWorkday (today) == true) { notifySlack(leaveEvents); } } const notifySlack = (message) => { const header = `【本日、以下のメンバがお休み】\n${message.toString()}`; const payload = { // 'username':'お知らせ', 'text':header, 'channel':'gas' }; const options = { 'method':'post', 'contentType':'application/json', 'payload':JSON.stringify(payload) }; const url = 'xxxxxx' UrlFetchApp.fetch(url,options); }

◆現状

以下の出力になる。

【本日、以下のメンバがお休み】

◆想定結果

【本日、以下のメンバがお休み】 XXお休み XX年休

プログラミング初心者です。
想定通りの結果が得られず、困っております。
エラーは表示されないため、原因がわかりません。
どなたか、アドバイス等いただけますと幸いです。
何か情報追加などありましたら、何なりと仰ってください。
よろしくお願いいたします(>_<)

追記

因みに、
const now = new Date();
であれば想定通りの結果が得られております。
※もちろん、const leaveEvents = calendar.getEventsForDay(today)とif (isWorkday (today)の箇所は(now)に変更して実行しております。

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

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

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

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

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

guest

回答1

0

ベストアンサー

コードに問題は見当りません。

2020年の6月2日は火曜日なんで、土日を通知しない、という要件および実装から通知されて正常です。

Date のときの月は 0 から 11 で暦の月より1少ない値を指定する必要があります。

つまり、5/2 なら new Date(2020,4,2) です。

投稿2020/04/03 04:16

papinianus

総合スコア12705

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

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

narururu

2020/04/03 14:16

ご回答ありがとうございます!papinianusさん☺ はい。平日なので通知されるのはよいのですが、Googleカレンダーに記載した以下の内容が出力されず困っております。 ---------- 【本日、以下のメンバがお休み】 XXお休み XX年休 ---------- 因みに4月2日を想定してテストしました。平日なので上記の結果が得られる想定です。
narururu

2020/04/03 15:24 編集

追記で記載したコードで実行した場合、平日は想定通りの結果が得られたので、先ほど土曜日になったタイミングで同様のコードを実行してみました。 そしたら、想定通り、何も表示されませんでした! また、配列の6番目の"REST"を”SUT”に変更し、コードを実行したら、想定通り出力されました! よって、デバッグ用のtodayコードに何か不備があったということですね。 これにて、課題は解決しました。 話は変わって、もしよろしければ1つ教えていただきたいのですが、 今回、"休"という文字を取得していますが、"有給"という文字も取得したく、filter(e=>e.indexOf("休")をfilter(e=>e.indexOf("休","有給")とコードを変更したのですが、休みの文字だけが取得され、有給はスルーされてしまいました。。。 もし、何かお気づきの点やご指摘等ありましたら、ご教示いただけますと幸いです。
papinianus

2020/04/04 13:26

4/2 なら new Date(2020,3,2) です。 > "有給"という文字も取得したく 運用で統一したほうがよくないですか?やすみ、ねんきゅう、ゆうきゅう、と書く人に対応できませんよ? filter(e=>/(休|有給|やすみ|ねんきゅう|ゆうきゅう)/.test(e)) こうした回避は可能ですが、このとき、「おやすみなさい」や「きょねんきゅうに連絡いただいた新規顧客を訪問」「ダルビッシュ有給料日」がヒットしてしまいます。 そういうことを書くなはこう書けと等価の運用ルールなので一度設計を考える機会かと思います。
narururu

2020/04/04 13:57

ご指摘の通り、4/2 なら new Date(2020,3,2) でした。失礼しました。 今回使用するカレンダーIDは、勤怠の報告用なので、"休"と"有給"の文字で別の文字を取得するケースはないと判断してます。しかし、おっしゃる通り、今後は運用面で記載を統一したほうがいいですね。 コードありがとうございます!(泣) そのように書くのですか(゜o゜) 実際に、想定通りの結果が得られました! 前回に引き続き、とても勉強になります!感謝です! それでは、papinianusさん、お体には十分気を付けて!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問