2016-09-28 48 views
1

我有很奇怪的问题。我创建了一个日期对象数组(星期一)Javascript推送不断删除第一项

// array to hold week commencing dates 
     var mondays = []; 
     mondays.push(today); 
     var novi = new Date(today); 

     while(novi < endDate){ 

      var next_monday = new Date(novi.setDate(novi.getDate() + 7)); 

      day_index = next_monday.getDay(); 
      if(day_index == 1){ 
       mondays.push(next_monday); 
      } 
      // increment the date 
      novi = next_monday; 
     } 
     console.log(mondays); 

更新:感谢您的回复。我在开始时创建了一个新对象,并使用了这个对象。因此我又创建了空数组,然后在开始循环之前给它添加了一个日期,然后循环中的第一项不会被添加,即使它被推入。我究竟做错了什么?

这是我从上面得到的console.log。 https://www.dropbox.com/s/04bckfcrwl7yvwd/Screenshot%202016-09-28%2018.29.25.png?dl=0

+1

如果*今天*是星期一,则添加7天将永远在星期一着陆,不需要* day_index *测试。 ;-) – RobG

回答

12
today.setDate(today.getDate() + 7) 

您正在修改你推入阵之日起的对象。

第一项没有被删除,它正在被更改。

var next_monday = new Date(today.setDate(today.getDate() + 7)); 

然后你从它创建一个新的日期对象。


创建新的日期对象第一,然后修改

+0

谢谢! 我在循环之前添加了新的对象,但现在它跳过了第二个日期。 我加了: var novi = new Date(today); 然后在整个循环中使用变量“novi”而不是今天。所以我得到第一次约会,然后第二次跳过,然后休息都很好。 https://www.dropbox.com/s/v21ylipmlkgsfhf/Screenshot%202016-09-28%2017.59.51.png?dl=0 –

+0

已更新的问题。感谢患者。 –

+0

@GoranJakovljevic - 你似乎仍然有同样的问题。唯一的区别是你在循环之前但在函数内部创建第一个日期对象,而不是将它传递给函数。 – Quentin