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!
私にとっては、それは完全に非自明なことであり、半時間の貴重な時間を費やしました;)