Заполните массив с датами
Действительно не могу понять, почему даты, которые я помещаю в массив, не являются датами, которые появляются, когда я вызываю массив в консоли. то есть я ожидал бы, что первая запись в массиве будет сегодняшней датой, что является результатом обоих предупреждений, но когда я проверяю первую позицию массива, вместо него есть вчерашняя дата!?
function sevenDayPeriod(date) {
for (var i = 0; i <=6; i++) {
alert(date); //check to see date is today's date
dateRange[i] = date;
alert(dateRange[i]); //confirm that what I've pushed to array is today's date
date = date.setDate(date.getDate() - 1);
date = new Date(date);
}
};
var dateRange = [];
var today = new Date();
sevenDayPeriod(today);
Спасибо
2 ответа
...
dateRange[i] = date;
alert(dateRange[i]); //confirm that what I've pushed to array is today's date
date = date.setDate(date.getDate() - 1);
...
В первой из приведенных выше строк вы устанавливаете элемент массива ih равным date
(ссылка), затем вы показываете его, а затем вы меняете тот же объект с setDate
что приводит к вашей проблеме, так как элемент массива все еще указывает на этот измененный объект.
Вы можете решить это, например, с помощью другой переменной, например, так
...
var prevDay = new Date();
prevDay.setDate(date.getDate() - 1);
date = prevDay;
...
или создайте его копию, прежде чем помещать в массив
function sevenDayPeriod(date) {
for (var i = 0; i <=6; i++) {
//date object is as a "pointer", you have to clone it
var copiedDate = new Date(date);
//alert(date); //check to see date is today's date
dateRange[i] = copiedDate;
//alert(dateRange[i]); //confirm that what I've pushed to array is today's date
date = date.setDate(date.getDate() - 1);
date = new Date(date);
}
};
var dateRange = [];
var today = new Date();
sevenDayPeriod(today);
console.log(dateRange);
Когда вы изменяете дату, вы также изменяете дату. Вы должны клонировать это.