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

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

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

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Q&A

解決済

1回答

4450閲覧

GASでTypeError: day.getDate is not a functionエラーが出る

enzinianwax

総合スコア4

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

0グッド

0クリップ

投稿2022/05/03 10:11

編集2022/05/16 03:01

GASでエラーが出ておりまして、原因がわからない状態であります。
↑の部分でTypeError: day.getDate is not a functionというエラーが出ます。
このGASのコードはSSのポイントをslackに自動で吐き出す機能の一部分です。先月まで正常に動いておりましたが、月が変わっていきなり動かなくなりました。
何が原因かわかりません。今まではこの部分でエラーが吐かれることはなかったので、どこが問題なのか不明で仕方ないです。
どなたかお分かりでしたらご教示願います。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2022/05/03 10:58 編集

days に適切な値が入っていない可能性があります。 エディタで const days = sheet.getRange(4, 2, 1, 24).getValues(); の下の行に console.log(days); を追加して、保存後、実行した場合、ログにはどう表示されますか?
enzinianwax

2022/05/03 12:14

情報 [ [ Mon May 02 2022 00:00:00 GMT+0900 (Japan Standard Time), Fri May 06 2022 00:00:00 GMT+0900 (Japan Standard Time), Mon May 09 2022 00:00:00 GMT+0900 (Japan Standard Time), Tue May 10 2022 00:00:00 GMT+0900 (Japan Standard Time), Wed May 11 2022 00:00:00 GMT+0900 (Japan Standard Time), Thu May 12 2022 00:00:00 GMT+0900 (Japan Standard Time), Fri May 13 2022 00:00:00 GMT+0900 (Japan Standard Time), Mon May 16 2022 00:00:00 GMT+0900 (Japan Standard Time), Tue May 17 2022 00:00:00 GMT+0900 (Japan Standard Time), Wed May 18 2022 00:00:00 GMT+0900 (Japan Standard Time), Thu May 19 2022 00:00:00 GMT+0900 (Japan Standard Time), Fri May 20 2022 00:00:00 GMT+0900 (Japan Standard Time), Mon May 23 2022 00:00:00 GMT+0900 (Japan Standard Time), Tue May 24 2022 00:00:00 GMT+0900 (Japan Standard Time), Wed May 25 2022 00:00:00 GMT+0900 (Japan Standard Time), Thu May 26 2022 00:00:00 GMT+0900 (Japan Standard Time), ご回答ありがとうございます。↑のように吐かれました。
enzinianwax

2022/05/03 12:15

ss上でいうと、5月の営業日のようです。
退会済みユーザー

退会済みユーザー

2022/05/03 12:20 編集

ありがとうございます。 では追加ですみませんが、 date = day.getDate(); の「前」に console.log(day) を追加して実行してみてください。 おそらく途中まで日付が表示され、エラーが発生して止まると思いますが、 エラーが発生するときの dayの値はどうなっていますか? 推測ですが、日付の列の途中に、空白もしくは日付ではない値が入ってしまっているのだと思います。
enzinianwax

2022/05/03 12:21

情報 [ [ Mon May 02 2022 00:00:00 GMT+0900 (Japan Standard Time), Fri May 06 2022 00:00:00 GMT+0900 (Japan Standard Time), Mon May 09 2022 00:00:00 GMT+0900 (Japan Standard Time), Tue May 10 2022 00:00:00 GMT+0900 (Japan Standard Time), Wed May 11 2022 00:00:00 GMT+0900 (Japan Standard Time), Thu May 12 2022 00:00:00 GMT+0900 (Japan Standard Time), Fri May 13 2022 00:00:00 GMT+0900 (Japan Standard Time), Mon May 16 2022 00:00:00 GMT+0900 (Japan Standard Time), Tue May 17 2022 00:00:00 GMT+0900 (Japan Standard Time), Wed May 18 2022 00:00:00 GMT+0900 (Japan Standard Time), Thu May 19 2022 00:00:00 GMT+0900 (Japan Standard Time), Fri May 20 2022 00:00:00 GMT+0900 (Japan Standard Time), Mon May 23 2022 00:00:00 GMT+0900 (Japan Standard Time), Tue May 24 2022 00:00:00 GMT+0900 (Japan Standard Time), Wed May 25 2022 00:00:00 GMT+0900 (Japan Standard Time), Thu May 26 2022 00:00:00 GMT+0900 (Japan Standard Time), Fri May 27 2022 00:00:00 GMT+0900 (Japan Standard Time), Mon May 30 2022 00:00:00 GMT+0900 (Japan Standard Time), Tue May 31 2022 00:00:00 GMT+0900 (Japan Standard Time), '', '', '', '', 'RP' ] ] この下で上記の、 TypeError: day.getDate is not a function findTodaysRow @ コード.gs:86 getTodaysPoints @ コード.gs:97 sendMessage @ コード.gs:13 といったエラーが出ております。
enzinianwax

2022/05/03 12:22

'', '', '', '', 'RP' ] ] このあたり問題ありそうですか?
退会済みユーザー

退会済みユーザー

2022/05/03 12:34 編集

回答しました。下の5行、「’','','','','RP'」がエラーの原因ですね。 これらはgetDate()関数を持たないのでエラーになります。
enzinianwax

2022/05/03 12:46

ご教示いただき、大変ありがとうございました! おかげさまで解決しました!!
guest

回答1

0

ベストアンサー

原因

コメントによると、days[0] に、Dateオブジェクトではない値(空白文字、または「RP」という文字)が含まれているとのことです。
これらはgetDate() という関数を持たないため、質問文にあるようなエラーが発生します。

解決案

値がDateオブジェクトかどうかを調べ、Dateオブジェクトではない場合は、スキップするようにします。

js

1function findTodaysRow() { 2 const sheet = defineSheet(); 3 // getRange(row, column, numRows, numColumns) 4 // B4(4,2)を始点にY4(1,24)までを取得 5 const days = sheet.getRange(4, 2, 1, 24).getValues(); 6 var today = new Date(); 7 let i = 0; 8 for(const day of days[0]){ 9 // Dateオブジェクトではない場合はスキップする。 10 if (Object.prototype.toString.call(day) !== '[object Date]') { 11 i++; 12 continue; 13 } 14 date = day.getDate(); 15 if (date == today.getDate()) { 16 // どこの列か取得(つまり日付列を特定する) 17 let row = i + 2; 18 return row; 19 } 20 i++; 21 } 22 // 日付が見つからない場合 23 return -1; 24}

投稿2022/05/03 12:32

編集2022/05/03 23:07
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

enzinianwax

2022/05/03 12:45

誠にありがとうございます!!解消されました! 本当に嬉しいです!!
退会済みユーザー

退会済みユーザー

2022/05/03 12:46

解決してよかったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問