在javascript中获取从开始日期到结束日期的几周

在javascript中获取从开始日期到结束日期的几周

问题描述:

我正在构建一个时间表函数,为此我必须在集合中将明智的数据插入数据库。在javascript中获取从开始日期到结束日期的几周

所以我创建一个数组,其中包含从start_date到end_date的星期。

1st推入一个数组: start_date =声明日期(如果声明日期是星期日,那么它认为星期一来的日期); end_date =周六的日期

第2到第n推入数组: start_date =星期一的日期;上周六END_DATE =日期,或者如果一周

var start = new Date("09/30/2016"); 
var end = new Date("11/2/2016"); 

var count = 0; 
var sDate; 
var eDate; 
var dateArr = []; 

while(start <= end){ 
    if (start.getDay() == 0){ 
     count = 0; 
    }else { 
     if(count == 0){ 
      sDate = start; 
      count = 1 
     }else { 
      count = 1; 
     } 

     if(start.getDay() == 6 || start == end){ 
      count = 1 
      eDate = start; 
     }else { 
      count = 1; 
     } 

     if(sDate && eDate){ 
      sDate = new Date(sDate) 
      eDate = new Date(eDate) 
      dateArr.push({'startDate': sDate, 'endDate': eDate}); 
      sDate = undefined; 
      eDate = undefined; 
     } 
    } 

    var newDate = start.setDate(start.getDate() + 1); 
    start = new Date(newDate); 
} 

但结果即时得到内的是这个

[{ 
    'startDate':Sat Oct 01 2016 00:00:00 GMT+0530 (IST), 
    'endDate':Sat Oct 01 2016 00:00:00 GMT+0530 (IST), 
}, 
{ 
    'startDate':Tue Oct 04 2016 00:00:00 GMT+0530 (IST), 
    'endDate':Sat Oct 08 2016 00:00:00 GMT+0530 (IST), 
}, 
{ 
    'startDate':Tue Oct 11 2016 00:00:00 GMT+0530 (IST), 
    'endDate':Sat Oct 15 2016 00:00:00 GMT+0530 (IST), 
}, 
{ 
    'startDate':Tue Oct 18 2016 00:00:00 GMT+0530 (IST), 
    'endDate':Sat Oct 22 2016 00:00:00 GMT+0530 (IST), 
}, 
{ 
    'startDate':Tue Oct 25 2016 00:00:00 GMT+0530 (IST), 
    'endDate':Sat Oct 29 2016 00:00:00 GMT+0530 (IST), 
}] 

编辑宣告结束日期:

预期结果:

[{ 
    'startDate':Fri Sep 30 2016 00:00:00 GMT+0530 (IST), 
    'endDate':Sat Oct 01 2016 00:00:00 GMT+0530 (IST), 
}, 
{ 
    'startDate':Mon Oct 03 2016 00:00:00 GMT+0530 (IST), 
    'endDate':Sat Oct 08 2016 00:00:00 GMT+0530 (IST), 
}, 
{ 
    'startDate':Mon Oct 10 2016 00:00:00 GMT+0530 (IST), 
    'endDate':Sat Oct 15 2016 00:00:00 GMT+0530 (IST), 
}, 
{ 
    'startDate':Mon Oct 17 2016 00:00:00 GMT+0530 (IST), 
    'endDate':Sat Oct 22 2016 00:00:00 GMT+0530 (IST), 
}, 
{ 
    'startDate':Mon Oct 24 2016 00:00:00 GMT+0530 (IST), 
    'endDate':Sat Oct 29 2016 00:00:00 GMT+0530 (IST), 
}, 
{ 
    'startDate':Mon Oct 31 2016 00:00:00 GMT+0530 (IST) 
    'endDate':Wed Nov 02 2016 00:00:00 GMT+0530 (IST), 
}] 
+1

查看[momentsjs](http://momentjs.com/) – miraculixx

+0

@miraculixx在推入数组之前,如果console.log显示星期一,则开始日期。 我也尝试过使用moments.js。开始日期仍显示为下一个日期 – Monasha

+0

您需要什么结果(日期之间的星期数)? –

检查一下。我修复了一些逻辑和obj引用错误。

var start = new Date(Date.UTC(2016, 09, 30, 0, 0, 0)); 
var end = new Date(Date.UTC(2016, 11, 02, 0, 0, 0)); 
var sDate; 
var eDate; 
var dateArr = []; 

while(start <= end){ 
    if (start.getDay() == 1 || (dateArr.length == 0 && !sDate)){ 
    sDate = new Date(start.getTime()); 
    } 

    if ((sDate && start.getDay() == 0) || start.getTime() == end.getTime()){ 
     eDate = new Date(start.getTime()); 
    } 

    if(sDate && eDate){ 
    dateArr.push({'startDate': sDate, 'endDate': eDate}); 
    sDate = undefined; 
    eDate = undefined; 
    } 

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

console.log(dateArr); 

https://jsfiddle.net/c58zde4b/6/

显示的日期可能因当地时区设置。

+0

在这个数组中的第一个对象是星期一,但在我的预期结果是星期五。所有其他对象的开始日期都是星期天。加上对象的数量是1减少 – Monasha

+0

请参阅更新的答案。 - 注意:星期日为0,星期一为1,依此类推。 - 如果日期不匹配一个小的偏移量,使您正在查看正确的时区。 –

+0

我已经对您的答案进行了一些更改,只是对其进行了审查。我将其标记为答案 – Monasha