Создание и вывод массива дат

298
28 февраля 2018, 10:37
  coffetime=new Array();      
  function myFunction() {
    var d = new Date(2018,1,15,11,33,30,0);
    for(p=0;p<15;p++){
    d.setDate(d.getDate()+1);
    coffetime[p]=d;   
    //document.write("<br>"+d);// тут работает
  }    
  for(p=0;p<15;p++)  document.write("<br>"+coffetime[p]);

Ожидаемый результат:

Fri Feb 16 2018 11:33:30 GMT+1000
Sat Feb 17 2018 11:33:30 GMT+1000
Sun Feb 18 2018 11:33:30 GMT+1000

результат:

Fri Mar 02 2018 11:33:30 GMT+1000
Fri Mar 02 2018 11:33:30 GMT+1000
Fri Mar 02 2018 11:33:30 GMT+1000

Что я делаю не так?

Answer 1

d у вас одна, и каждый раз когда вы вызываете setDate, она меняется. А в массиве у вас 15 ссылок на одну и ту же дату. Вариантов это победить целая куча

var coffetime = new Array();       
 
var d = new Date(2018,1,15,11,33,30,0); 
for(var p=0; p<15; p++){ 
   d.setDate(d.getDate()+1); 
   coffetime[p] = d;    
} 
// весь массив состоит из d 
console.log(coffetime); 
 
var d = new Date(2018,1,15,11,33,30,0); 
for(var p=0; p<15; p++){ 
   d.setDate(d.getDate()+1); 
   coffetime[p] =d.toString(); 
} 
 
// массив состоит из строк, полученных из d в процессе изменения даты. 
console.log(coffetime); 
 
// Разные d 
for(var p=0; p<15; p++){ 
   var d = new Date(2018,1,15,11,33,30,0); 
   d.setDate(d.getDate() + p); 
   coffetime[p] =d.toString(); 
} 
 
console.log(coffetime); 
 
 
// Еще вариант с разными d 
var d = new Date(2018,1,15,11,33,30,0); 
for(var p=0; p<15; p++){ 
   d.setDate(d.getDate()+1); 
   // клонируем дату 
   coffetime[p] = new Date(+d); 
} 
 
console.log(coffetime);

Answer 2

var coffetime = []; 
 
 
  
  for (var p = 1; p <=15; p++) { 
    var d = new Date(2018, 1, p, 11, 33, 30, 0); 
    coffetime[p] = d; 
    } 
     
  for (var p = 0; p < 15; p++)  
  document.write("<br>" + coffetime[p]);

Answer 3

Ваша ошибка в том, что вы меняете и добавляете в массив один и тот же объект!

Посмотрите на этот код, здесь каждый раз создается новый объект Date и кладется в массив coffetime.

<html>
<head>
    <title>Test</title>
</head>
<body>
</body>
</html>
<script type="text/javascript">
    var coffetime = new Array();
    var d = new Date(2018, 1, 15, 11, 33, 30, 0);
    for(var p = 0; p < 15; p++) {
        d.setDate(d.getDate() + 1);
        coffetime[p] = new Date(d);   
        //document.write("<br>"+d);// тут работает
    }
    for(var p = 0; p < 15; p++) {
        document.write("<br>" + coffetime[p]);
    }
</script>
READ ALSO
Как записать в куки, затем успешно выводить при перезагрузке страницы

Как записать в куки, затем успешно выводить при перезагрузке страницы

Сам я не очень владею ни js ни Jquery, интуитивно могу понять смысл скрипта, но какие-то глобальные операции производить пока не умею! Рассчитываю...

378
Tooltip.Связать вывод через content + атрибут title

Tooltip.Связать вывод через content + атрибут title

Как проще вывести имеющийся контент + атрибут titleТ

223
Как организовать delay в React?

Как организовать delay в React?

Есть сайдбар, перед тем как он открывается происходит рендеринг его чайлдов, что немного замедляет открытиеЯ решил оттянуть рендеринг и после...

284