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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google Apps Script

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

Q&A

1回答

1264閲覧

GAS 日付の比較ができない

wciwij

総合スコア3

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google Apps Script

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

0グッド

2クリップ

投稿2023/05/10 01:54

実現したいこと

googleフォームからgoogleスプレッドシートへ自動転記
googleフォーム側のGASで編集用URLを追記したい
その際にレコードに誤りがないか確認するため日付の比較がしたいが、一見同じデータにみえる(というか同じのはず)のにうまく比較ができない

該当のソースコード

console.log(timestamp); console.log(sh_alldata.getRange(7, 1).getValue()); if(timestamp === sh_alldata.getRange(7, 1).getValue()){ console.log("1:timestamp ===sh_alldata.getRange(7, 1).getValue()"); } //データ型に変換 var test_date = new Date(sh_alldata.getRange(7, 1).getValue()); var t_date= new Date(timestamp); console.log(t_date); console.log(test_date); if(timestamp === test_date){ console.log("1:timestamp ===test_date"); } if(t_date === sh_alldata.getRange(7, 1).getValue()){ console.log("1:t_date ===sh_alldata.getRange(7, 1).getValue()"); } if(t_date === test_date){ console.log("1:t_date ===test_date"); }
2023/05/10 10:43:02 デバッグ Wed May 10 2023 10:42:59 GMT+0900 (Japan Standard Time) 2023/05/10 10:43:02 デバッグ Wed May 10 2023 10:42:59 GMT+0900 (Japan Standard Time) 2023/05/10 10:43:02 デバッグ Wed May 10 2023 10:42:59 GMT+0900 (Japan Standard Time) 2023/05/10 10:43:02 デバッグ Wed May 10 2023 10:42:59 GMT+0900 (Japan Standard Time)
test_date.setHours(0, 0, 0, 0); t_date.setHours(0, 0, 0, 0); console.log(t_date); console.log(test_date); if(timestamp === test_date){ console.log("2:timestamp ===test_date"); } if(t_date === sh_alldata.getRange(7, 1).getValue()){ console.log("2:t_date ===sh_alldata.getRange(7, 1).getValue()"); } if(t_date === test_date){ console.log("2:t_date ===test_date"); }
2023/05/10 10:43:02 デバッグ Wed May 10 2023 00:00:00 GMT+0900 (Japan Standard Time) 2023/05/10 10:43:02 デバッグ Wed May 10 2023 00:00:00 GMT+0900 (Japan Standard Time)

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

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

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

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

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

YellowGreen

2023/05/10 09:58 編集

同じタイトルの解決済みの質問ではgetTimeでの比較についての回答がなされていますが、 念のための確認です。 Googleフォームのトリガー起動のスクリプトでフォームの送信イベントから e.response.getTimestamp()で取得できるタイムスタンプはミリ秒単位の時刻が含まれています。 これに対して、 スプレッドシートに追記されていく回答データのA列のタイムスタンプは秒単位の時刻ですから、 そのままxxxx.getTime() == yyyy.getTime()で比較するとミリ秒合わないのでfalseになると考えられます。 const timestamp = e.response.getTimestamp();//送信イベントからタイムスタンプを取得 timestamp.setMilliseconds(0);//ミリ秒をゼロクリア const shTimestamp = sh_alldata.getRange(7, 1).getValue();//回答先シートからタイムスタンプを取得 if (timestamp.getTime() == shTimestamp.getTime()) {//日時が一致したときの処理 ... } などとしてミリ秒部分をゼロクリアしてから比較してみるとどうなるでしょうか?
YellowGreen

2023/05/10 23:58 編集

これまでのお話では、同時刻に複数の回答があり得るということだったので、 タイムスタンプではなく、回答ごとにユニークになる回答者のメールアドレス等で比較した方がよろしいかと思います。 マイナンバーカードでの別人の証明書交付(1秒以内の同時申請による上書きが原因と報道されています。)の件もあるので、時刻だけのチェックでは違う人のURLとなる可能性が懸念されますね。
guest

回答1

0

大小の比較はしてくれるのですが==での比較は同じオブジェクトかを比較してしまいます。
日付等を比較する場合は「.getTime()」などから得られた値を比較しましょう。

const test1= new Date(); const test2 = new Date(); // trueにはならない if(test1 === test2){ console.log("true1"); } // trueになる if(test1.getTime() === test2.getTime()){ console.log("true2"); }

投稿2023/05/10 02:36

bebebe_

総合スコア504

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問