回答編集履歴

1

説明の順序を変えました。

2024/04/26 08:49

投稿

atlanticSalmon
atlanticSalmon

スコア39

test CHANGED
@@ -1,14 +1,29 @@
1
1
  コードを全てチェックしたわけではありませんが、
2
2
  気になる部分が2箇所あります。
3
3
 
4
+ ### 1) 日付の大小比較で当日を含めて比較をしています
5
+ ```js
6
+ // 実行日がトリガー日の前営業日より前の日付やトリガー日より後の日付には通知しない
7
+ const prevWeekday = getPreviousWeekday(today);
8
+ Logger.log("前営業日: " + prevWeekday.toLocaleString("ja-JP"));
9
+ if (today < prevWeekday || today >= reservationDate) {
10
+ continue;
11
+ }
12
+ ```
13
+ の部分で、
14
+ 「トリガー日より後の日付」とコメントに書いてあるのですが、
15
+ 実際のコードが `today >= reservationDate` になっているので
16
+ 同じ日付の場合であっても当日の予定は通知されなくなってしまいます。
17
+ ここは `>` で比較すべきです。
18
+
4
- ### 1) 実行日が時刻を含んだままになっています
19
+ ### 2) 実行日が時刻を含んだままになっています
5
20
  ```js
6
21
  // 現在の日付と時刻を取得
7
22
  const today = new Date();
8
23
  Logger.log("今日: " + today.toLocaleString("ja-JP"));
9
24
  ```
10
- ここのログを見るとわかると思います。
25
+ ここのログを見ると時刻が含まれていることがわかると思います。
11
- 一方で、シートに入力した実行予定日は時刻は入力されていないと思いますので、
26
+ シートに入力した実行予定日は時刻は入力されていないと思いますので、
12
27
  午前零時になっています。
13
28
  これも
14
29
  ```js
@@ -16,7 +31,7 @@
16
31
  Logger.log("トリガー日: " + reservationDate.toLocaleString("ja-JP"));
17
32
  ```
18
33
  のログで確認できます。
19
- このことにより、isSameDate関数以外で日付の比較をすると
34
+ このことにより、`>=` や `>` 等で日付の大小比較をすると
20
35
  実行日の方が実行予定日より時刻の分だけ大きいと判断されてしまいます。
21
36
 
22
37
  実行日と実行予定日を日付のみで比較できるように
@@ -28,21 +43,6 @@
28
43
  ```
29
44
  このように、時刻部分を午前零時にしておきます。
30
45
 
31
- ### 2) 日付の大小比較で当日を含めて比較をしています
32
- ```js
33
- // 実行日がトリガー日の前営業日より前の日付やトリガー日より後の日付には通知しない
34
- const prevWeekday = getPreviousWeekday(today);
35
- Logger.log("前営業日: " + prevWeekday.toLocaleString("ja-JP"));
36
- if (today < prevWeekday || today >= reservationDate) {
37
- continue;
38
- }
39
- ```
40
- の部分で、
41
- 「トリガー日より後の日付」とコメントに書いてあるのですが、
42
- 実際のコードが `today >= reservationDate` になっているので
43
- (どちらも午前零時で比較しても)当日の予定は通知されなくなってしまいます。
44
- ここは `>` で比較すべきです。
45
-
46
46
  ちなみに、時刻を全て午前零時で統一しておくと
47
47
  等しいかどうかの比較はisSameDate関数を使わなくても
48
48
  ```js