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

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

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

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

Q&A

解決済

2回答

1784閲覧

今日の日付だったら、メールを通知する設定

yoyoy

総合スコア14

Google Apps Script

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

0グッド

0クリップ

投稿2020/12/08 00:31

今日の日付と同じスプレッドシートに日付があったら、
「本日、作業があります」といったメールを送信させるスクリプトを作成しています。
作成したスクリプトは以下です。

日付の設定がうまくできていないのか、今日の日付と行事日の日付が一致していないけど、
「行事があります」といったメールが送信されてしまいます。

以下のスクリプトでどこを修正したらよいかご教示いただけないでしょうか。

行事開始日は、J列です。

function

1 2var sheet = SpreadsheetApp.getActiveSheet(); // シートの取得 3 var startRows = 2; // 開始行数 4 var sheetData = sheet.getSheetValues(startRows, 1, sheet.getLastRow(), 16); // シートのデータを取得(2次元配列) 5 var dtLimit = new Date(); // 現在時刻を取得 6 7 sheetData.forEach(function(value, index) { // シートの各行ごとにデータを取り出す 8 9 var dtLimit = new Date(); // 現在時刻を取得 10 11 var title = "本日、〇〇行事があります。";  //メール件名 12 var body =''; 13 body += '本日、〇〇行事があります。\n'; 14 body += '\n'; 15 body += '準備をお願いします。\n'; 16 body += '詳細は以下から確認してください。\n'; 17 body += '\n'; 18 body += '【詳細はこちらで確認】 \n'; 19 body += ' 〇〇〇〇〇 \n'; 20 body += '\n'; 21 22 23 if (value[11] && !value[14] && !value[15] && new Date(value[7]).getDate() == dtLimit.getDate()) { // 承認済み、かつ、返却なし、かつ、キャンセルなし、かつ、行事日が今日より前ならば 24 GmailApp.sendEmail('メールアドレス', title , body); // メールを送信する 25 26 } 27 }); 28}

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

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

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

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

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

guest

回答2

0

  • ライブラリを使わない場合について

getDate() しているので、月が異なっても日があっていれば同じになってしまうのではないのかというのと、timezone がどうなっているのか、のあたりが気になりました。

Utilities.formatDate(date, 'Asia/Tokyo', 'yyyy/MM/dd') を使って、年月日にしたうえで文字列で比較すれば一致させやすいかなと思います。

投稿2020/12/18 15:55

papinianus

総合スコア12705

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

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

0

ベストアンサー

JavaScript では、Date型同士を==で比較した場合、同じインスタンスへの参照かどうかを返すため、同じ日時でもTrueにはなりません。(===も同じ)
getTime()で協定世界時(UTC)の1970年1月1日00:00:00からの経過ミリ秒へ変換して比較してください。

JavaScript

1const date1 = new Date(2020, 11, 8); 2const date2 = new Date(2020, 11, 8); 3 4console.log(date1 === date2); // false 5console.log(date1.getTime() === date2.getTime()); // true 6 7//ちなみに同じインスタンス同士なら直接比較してもいい(当たり前) 8const date3 = date1; 9console.log(date1 === date3); // true

投稿2020/12/08 06:01

draq

総合スコア2577

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

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

yoyoy

2020/12/15 00:00 編集

ご連絡ありがとうございました。 Date同士では比較ができなきこと、大変参考になりました! 今回、momentオブジェクトを利用してdayの比較をしてみることとしました。 変数を以下とし、 var gyouji = value[7]; var day = Moment.moment(); 設定を以下にしました Moment.moment(gyouji).isSame(day,'day') テストしたところ、おそらく大丈夫そうかなと思っているのですが、 様子を見てみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問