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

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

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

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Google Apps Script

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

JavaScript

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

Q&A

解決済

2回答

4630閲覧

gasで同じ年月日かどうか判断するプログラムを教えてください

sakana_motoki

総合スコア16

LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Google Apps Script

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

JavaScript

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

0グッド

0クリップ

投稿2020/06/24 15:54

編集2020/06/24 16:59

スプレッドシートに値が入力される度に日付と1ヶ月後の日付を取得し埋め込んでおります。
イメージ説明
上記のようにうまく日付を取れているのですが別の関数で日付を比較しているのですがif文でtrueが返ってきません。
ログをみたのですが

cansellRow[i]
[ [ Thu Jul 23 2020 00:00:00 GMT+0900 (日本標準時) ], [ Thu Jul 23 2020 00:00:00 GMT+0900 (日本標準時) ], [ Wed Jun 24 2020 00:00:00 GMT+0900 (日本標準時) ], [ Fri Jul 24 2020 00:00:00 GMT+0900 (日本標準時) ], [ Fri Jul 24 2020 00:00:00 GMT+0900 (日本標準時) ] ]

today
Wed Jun 24 2020 00:00:00 GMT+0900 (日本標準時)

とちゃんと取れています。

//退会日のアカウントがないか確認する関数 function checkAcount(){ //年月日を取得 var today =new Date(new Date().toDateString()); // アクセストークン var ACCESS_TOKEN = 'xxxxxxx'; // 利用しているシート var data = SpreadsheetApp.openById('xxxxxxx').getSheetByName('シート1'); //最終行を取得 var last_row = data.getLastRow(); //全ての行を取得 var allRow =data.getRange(2,2,last_row-1,4).getValues(); //退会の行のみ取得 var cansellRow=data.getRange(2,4,last_row-1,1).getValues(); console.log(cansellRow); console.log(today); for(var i = 2; i < cansellRow.length; i++) { if(cansellRow[i] == today) { console.log("ここまでは行けてる"); function pushMessage() { var postData = { "to": "xxxxx", "messages": [{ "type": "text", "text": "おはよう", }] }; var url = "https://api.line.me/v2/bot/message/push"; var headers = { "Content-Type": "application/json", 'Authorization': 'Bearer ' +ACCESS_TOKEN, }; var options = { "method": "post", "headers": headers, "payload": JSON.stringify(postData) }; var response = UrlFetchApp.fetch(url, options); } } } }

---他に試したこと
moment.jsというライブラリを入れてしっかりと値を取れているのを確認して

if(cansellRow[i].isSame(today,"day")){ console.log("ここまでは行けてる"); }else{ console.log("あかん"); }

上記ではそもそもエラーになりました。エラー文
TypeError: cansellRow[i][0].isSame is not a function at checkAcount(コード:78:25)

など色々試したのですがうまく行きません。

どなたか良い方法、またはコードで間違っている箇所があれば教えていただければ幸いです。

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

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

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

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

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

draq

2020/06/24 16:39

LINEのアクセストークンとユーザーIDはもし本物を質問に記載しているなら消してください。 他人が悪用できてしまいます。
sakana_motoki

2020/06/24 17:00

ご指摘ありがとうございます あとで消そうと思っていたのですが忘れていました
guest

回答2

0

ベストアンサー

Date型を直接比較した場合、同じインスタンスを指しているかどうかの比較になるので、値で比較したい場合はDate.prototype.getTime()を使って取得したUNIXエポックからの経過ミリ秒を比較してください。

Date.prototype.getTime() - MDN
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date/getTime

JavaScript

1const date1 = new Date("2020-06-25"); 2const date2 = new Date("2020-06-25"); 3const date3 = date1; 4 5console.log(date1 === date2) 6// => false 7 8console.log(date1.getTime() === date2.getTime()) 9// => true 10 11console.log(date1 === date3) 12// => true 13

投稿2020/06/24 17:03

draq

総合スコア2577

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

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

sakana_motoki

2020/06/24 17:22

なるほど、ありがとうございます! 今回の場合一度スプレッドシートに埋め込んだ値を取得するのですが cansellRow[i].getTime()でUNIXエポックからの経過ミリ秒を取得できるのでしょうか?
draq

2020/06/25 02:29

cansellRow[i] のデータ型が Date 型なら取得できます。スプレッドシート上での見た目が同じでも書式設定次第で、string型になったりDate型になったりします。 string 型になっている場合は、 new Date(cansellRow[i]) 等して Date 型にしてから getTime() 読んでください。
guest

0

javascript

1const checkAccount = () => { 2 const today = Utilities.formatDate(new Date(), 'JST', 'yyyy/MM/dd'); 3 const data = SpreadsheetApp.openById('xxxxxxx').getSheetByName('シート1').getDataRange().getValues().slice(1); 4 // const data = SpreadsheetApp.getActive().getSheetByName('シート1').getDataRange().getValues(); //でよいのでは。 5 data.forEach(e => { 6 if(today !== Utilities.formatDate(e[3], 'JST', 'yyyy/MM/dd')) return; 7 pushMessage(); 8 }); 9} 10const pushMessage = () => { 11 const ACCESS_TOKEN = 'xxxxxxx'; 12 const postData = { 13 "to": "xxxxx", 14 "messages": [{ 15 "type": "text", 16 "text": "おはよう", 17 }] 18 }; 19 const url = "https://api.line.me/v2/bot/message/push"; 20 const headers = { 21 "Content-Type": "application/json", 22 'Authorization': 'Bearer ' +ACCESS_TOKEN, 23 }; 24 25 const options = { 26 "method": "post", 27 "headers": headers, 28 "payload": JSON.stringify(postData) 29 }; 30 UrlFetchApp.fetch(url, options); 31}

時刻が意図しない時刻になったことがあって、日付文字列にして比較してます。

投稿2020/06/25 09:25

papinianus

総合スコア12705

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問