スプレッドシートから正しい日付を取得しているGASに問題があります。スプレッドシートからGASの日付が間違っています
テストとして、私は日付を2017年6月27日に設定し、それから1日を引いたものの、デバッグは2017年6月26日の両方の日付を示しています。
スプレッドシートから正しい日付を取得しているGASに問題があります。スプレッドシートからGASの日付が間違っています
テストとして、私は日付を2017年6月27日に設定し、それから1日を引いたものの、デバッグは2017年6月26日の両方の日付を示しています。
ガスは、標準のJavaScriptのDateオブジェクトを使用しています。オブジェクトは参照型であり、値型ではありません(実際には、JSのすべてがオブジェクトであり、オブジェクトは結合配列ですが、分かりやすくするために残しておきます)。
は日付を初期化し、この例では、この
var d1 = new Date(2017, 6, 26);
var temp = d1;
ような別の変数に割り当てると仮定し、変数d1は日付オブジェクトがメモリに格納されている場所への参照を含みます。 d1を別の変数に割り当てるときは、NOTオブジェクトをコピーします(2つの整数値から予想されるように)。代わりに、別の参照を作成しますが、両方の変数がメモリ内の同じオブジェクトを指しています!
これで、DateオブジェクトのsetDate()を呼び出すと、元の日付変数が変更される理由を理解するのがはるかに理解しやすくなります。 JSのドキュメントによると、setDate()メソッドは、 "現在設定されている月の開始点を基準にDateオブジェクトの日を設定します"。 Dateオブジェクトのメソッドを呼び出すと、ドットの左側にあるオブジェクトに影響します。
以下のコードは、一時オブジェクトの作成に基づく回避策です。月はゼロ指数であるため、6は7月となります。
var d1 = new Date(2017, 6, 26); //Logs Wed Jul 26 00:00:00 GMT+03:00 2017
var temp = new Date(d1.getTime());
var d2 = new Date(temp.setDate(temp.getDate() - 1)); //Logs Tue Jul 25 00:00:00 GMT+03:00 2017
ありがとうございました。それは私が日付変数をよりよく理解するのに役立ちます。新しい日付で一時変数を使用すると、私の問題は解決します。 –