回答編集履歴

3

新たに入力文字の補正の処理を加えました。

2023/03/28 12:45

投稿

YellowGreen
YellowGreen

スコア673

test CHANGED
@@ -1,3 +1,6 @@
1
+ 当初の回答に修正を加えました。
2
+
3
+ --<当初の回答>--
1
4
 
2
5
  forEachの中なので、
3
6
  for(;;)ループはいらないと思います。
@@ -31,3 +34,58 @@
31
34
  使っていないのなら、
32
35
  time_text = start_time
33
36
  の行も削除しましょう。
37
+
38
+ --<以降は回答の追加です。>--
39
+
40
+ まず、日付、時刻の全角入力やセミコロンの入力を訂正して日付オブジェクトを生成する補助関数を
41
+ myFunctionの前か後に保存します。
42
+
43
+ ```javascript
44
+ //日付、時刻の文字列から日時のオブジェクトを返す
45
+ function genDate(_date) {
46
+ if (Object.prototype.toString.call(_date) != "[object Date]") {
47
+ //日付オブジェクトでない→セミコロン、全角数字を修正
48
+ _date = _date.toString().replace(/[:;;]/g, ":");
49
+ _date = _date.replace(/[0-9]/g, s => String.fromCharCode(s.charCodeAt(0) - 0xFEE0));
50
+ //'22:22'→'1989/12/30 22:22:00'
51
+ var hhmm = /^\d+:\d+$/;
52
+ if (hhmm.test(_date)) {
53
+ _date = "1899/12/30 " + _date + ":00";
54
+ }
55
+ return new Date(_date);
56
+ } else {
57
+ //日付オブジェクトならそのまま返す
58
+ return _date;
59
+ }
60
+ }
61
+ ```
62
+
63
+ そしてforEach文をこれに合わせて修正します。
64
+
65
+ ```javascript
66
+ data_arrays.forEach(function (data_array) {
67
+ var cell_date = genDate(data_array[0]);//日付
68
+ if (cell_date.getFullYear() == today.getFullYear() &&
69
+ cell_date.getMonth() == today.getMonth() &&
70
+ cell_date.getDate() == today.getDate()) {
71
+ start_time = cell_date;
72
+ start_time2 = data_array[1];//なまえ
73
+ start_time3 = data_array[2];//掃除内容
74
+ start_time4 = genDate(data_array[3]);//時刻
75
+ message += Utilities.formatDate(start_time, "JST", "MM/dd") +
76
+ start_time2 + start_time3 +
77
+ Utilities.formatDate(start_time4, "JST", "HH:mm") + "\n";
78
+ num++;
79
+ // return false;//←この行は不要
80
+ }
81
+ })
82
+ ```
83
+
84
+ 最後に不要な行がもう一つありましたので、削除(コメントに)します。
85
+
86
+ ```javascript
87
+ // var date = today.getFullYear() + '年' + (today.getMonth() + 1) + '月' + today.getDate() + '日';
88
+ ```
89
+
90
+ 以上で、日付、時刻に全角数字など不用意な入力があっても、ある程度は対応できるようになります。
91
+

2

fot → for

2023/03/28 09:16

投稿

YellowGreen
YellowGreen

スコア673

test CHANGED
@@ -14,11 +14,12 @@
14
14
  と日付、時刻は一度オブジェクトにしてから代入しましょう。
15
15
 
16
16
  for (var i = 1; i <= 1; i++) {
17
- の行とfot(;;)ループを閉じる
17
+ の行とfor(;;)ループを閉じる
18
18
  }
19
19
  の行を削除します。
20
20
 
21
- iPhoneからなので、回答が整形できてるか確認できませんが
21
+ (iPhoneからなので、回答が整形できてるか確認できませんが)
22
+
22
23
  オブジェクトにすると、何かしらの日付になるので、
23
24
  ```javascript
24
25
  if(start_time != ""){

1

let i → ver i

2023/03/28 09:10

投稿

YellowGreen
YellowGreen

スコア673

test CHANGED
@@ -2,7 +2,7 @@
2
2
  forEachの中なので、
3
3
  for(;;)ループはいらないと思います。
4
4
 
5
- そして、let i も不要なので配列インデックスは、
5
+ そして、ver i も不要なので配列インデックスは、
6
6
  そのまま0,1,2,3として、
7
7
 
8
8
  ```javascript