Dateオブジェクトの値を暗黙的に設定しますか?

タスク:JavaScriptで昨日とday_week_backを取得します。 私は簡単なスクリプトを書いています:

var dateToday = new Date();

var tmpDate = new Date();



tmpDate.setDate(dateToday.getDate() - 8);

alert(dateToday); // <- Jun 07, OK

alert( tmpDate ); // <- May 30, OK



tmpDate.setDate(dateToday.getDate() - 1);

alert(dateToday); // <- Jun 07, OK

alert( tmpDate ); // <- May 06, Oooops!








何か特別なものがあるように思えますか? 私が欲しかったものと私が得たものを見てみましょう:

-Date型の2つの異なるオブジェクトを作成し、変数dateTodayおよびtmpDateに書き込みます。 これが「今日」です。

-tmpDateの値を(dateToday-8 days)に設定します。 今日が6月7日である場合、5月30日に判明します。すべてが正しいです。 tmpDateの値を表示します-実際、5月30日。

「今、昨日取得したい。」 dateTodayの値を取得し(これはどこにも変更されておらず、今日の日付を格納します)、それから1日を引きます。 6月6日を取得する必要があります。

- 5月 5日のアラート表示!



この奇妙なスクリプト動作の理由は何ですか? また、Dateオブジェクトにプロパティがあるという事実は、日、月、年、時間などです。 相互接続されていないため、最初のインストールでは月= 5、日= 30、2番目-唯一の日= 5が設定されます。ここから5月5日が取得されます。



どうする 2番目のアクションの前に変数を再初期化します。 つまり:

var dateToday = new Date();

var tmpDate = new Date();



tmpDate.setDate(dateToday.getDate() - 8);

alert(dateToday); // <- Jun 07, OK

alert( tmpDate ); // <- May 30, OK



tmpDate = new Date();



tmpDate.setDate(dateToday.getDate() - 1);

alert(dateToday); // <- Jun 07, OK

alert( tmpDate ); // <- Jun 06, OK!








私にとっては、それは完全に非自明なことであり、半時間の貴重な時間を費やしました;)



All Articles