2015-01-05 3 views
1

Почему первая дата не добавляется в этот массив?Почему первая дата не добавляется в массив

function createArrayOfDates(start, end) { 
    var dateArray = []; 

    while(start < end) { 
     dateArray.push(start); 
     start = new Date(start.setDate(start.getDate() + 1)); 
    } 

    return dateArray; 
} 

start = new Date(2015, 01, 01); 
end = new Date(2015, 01, 05); 
console.log(createArrayOfDates(start, end)); 

Результат, который я ожидаю, должен включать первую дату (2015/01/01), но массив начинается со второго.

Любые идеи?

+1

Кстати: не запускайте целые числа с нулем. '01' является * восьмеричным *, другими словами:' 010 === 8'. Кроме того, аргумент месяца для 'Date' имеет 0-индекс. Другими словами, 'Date (2015, 1, 1)' является первым из * feb * (возможно, вы это знаете, но это подразумевается в вашем вопросе, который вы ожидали * jan *). – Hamish

ответ

5

С Date не является примитивным типом, он передается по ссылке. Это означает, что вам нужно клона значение start, прежде чем нажимать его в массив результатов:

dateArray.push(new Date(start)); 

В противном случае start переменные и вновь толкающая элемент массива будут по-прежнему ссылаются на тот же значение.

См MDN

0

Попробуйте это ..

<script> 
function createArrayOfDates(start, end) { 
    var dateArray = []; 

    while(start < end) { 
     dateArray.push(start); 
     start = new Date(start); 
    } 

    return dateArray; 
} 
function getMyDateFormat(date) { 
    var d = date ? new Date(date) : new Date; 
    var dt = [d.getFullYear(), d.getMonth(), d.getDay()+1].join("/"); 
    return dt; 
} 
start = getMyDateFormat(new Date(2015, 01, 01)); 
end = getMyDateFormat(new Date(2015, 01, 05)); 

console.log(createArrayOfDates(start, end)); 

</script> 

Результат:

["2015/1/1"] 
Смежные вопросы