2015-12-22 3 views
1

У меня очень странная проблема с Javascript. Я пытаюсь пропустить мою дату, чтобы выполнить некоторую проверку и добавить значение к моему массиву, но когда я возвращаю массивы, он показывает все мои коллекции с последним значением. Ниже мой код:Почему все элементы Date в моем массиве совпадают с датой?

function myFunction() { 
    var todayDate = new Date(); 
    var firstDay = new Date(todayDate.getFullYear(), todayDate.getMonth(), 1); 
    var lastDay = new Date(todayDate.getFullYear(), todayDate.getMonth() + 1, 0); 
    var testDates=[]; 

     while (firstDay <= lastDay) { 
      var currentDate = firstDay; 

      testDates.push(firstDay); 

      firstDay.setDate(firstDay.getDate() + 1); 
     } 

    document.getElementById("demo").innerHTML = testDates; 
} 

Это заканчивается с последним значением для всех дат моих:

Пт Янв 01 2016 00: 00: 00, Пт Янв 01 2016 00: 00: 00, пт 1 января 2016 00: 00: 00, пт 1 января 2016 00: 00: 00, пт 1 января 2016 00: 00: 00, Пт янв 01 2016 00:00:00

Почему это происходит ?

+1

Вам нужно создать новые даты, а не обновлять один и тот же объект и нажимать несколько раз. –

ответ

0

Вы не добавляете дату в свой массив, но повторяете дату. Затем, если вы обновите firstDay, вы обновите дату ВСЕХ элементов в массиве. (Потому что все указывают на ту же дату). Попробуйте клонировать дату, как это:

function myFunction() { 
    var todayDate = new Date(); 
    var firstDay = new Date(todayDate.getFullYear(), todayDate.getMonth(), 1); 
    var lastDay = new Date(todayDate.getFullYear(), todayDate.getMonth() + 1, 0); 
    var testDates=[]; 

    while (firstDay <= lastDay) { 
     var currentDate = firstDay; 

     testDates.push(new Date(firstDay.getTime())); 

     firstDay.setDate(firstDay.getDate() + 1); 
    } 

    document.getElementById("demo").innerHTML = testDates; 
} 
+0

Я вижу свои ошибки. Спасибо, что указали мои глупые ошибки. –

0

Создание небольшого изменения на этот комментарий: Why are all Date elements in my array the same date?

function myFunction() { 
    // Using variables definition pattern 
    var todayDate = new Date(), 
     firstDay = new Date(todayDate.getFullYear(), todayDate.getMonth(), 1), 
     lastDay = new Date(todayDate.getFullYear(), todayDate.getMonth() + 1, 0), 
     currentDate = firstDay, 
     testDates=[]; 

    // Change firstDay to currentDate in comparison part of the loop 
    while (currentDate <= lastDay) { 
     testDates.push(new Date(currentDate.getTime())); 
     // Also change firstDay to currentDate because it's a temporary 
     // variable used to perform calculations and moving through 
     // values 
     currentDate.setDate(currentDate.getDate() + 1); 
    } 

    document.getElementById("demo").innerHTML = testDates; 
} 

1) Переменная модель определения позволяет вам определение групп переменных таким образом, что проще прочитать код (посмотрите на invenenation); 2) В исходном коде эта строка var currentDate = firstDay; делает только ничего, но только объявляет переменную, которая нигде не используется. Также неверно изменить значение firstDay, поскольку, поскольку оно исходит от имени переменной, оно не должно меняться. Я считаю, что currentDate был использован как временный, просто замечая это.

Смежные вопросы