2017-05-06 66 views
0

我有两个日期,例如1/04/2017 - 2017年3月30日Javascript:查找两个日期之间每个月的第一个和最后一个日期?

我想查找上述日期范围之间每个月的第一个和最后一个日期。

这样的 -

2017年1月4日 - 30/04/2017 2017年1月5日 - 31/05/2017 2017年1月6日 - 30/06/2017

这是因为我想用在fullcalendar该解决方案,周期性活动,这样我就可以在下面的代码添加日期范围 -

batches.push({ 
    id  : item.id, 
    title  : item.title.textCapitalize(), 
    start  : item.start_time, 
    end  : item.end_time, 
    dow  : item.weekdays, 
    ranges : 
    [ 
     { 
     start : '2017-04-01', //all of april 
     end  : '2017-04-20', 
     }, 
     { 
     start : '2017-05-01', //all of may 
     end  : '2017-05-31', 
     }, 
     { 
     start : '2017-06-01', //all of june 
     end  : '2017-06-30', 
     }, 
    ], 
    backgroundColor : backgroundColor, 
    borderColor  : backgroundColor 
}); 
+0

你为什么不使用[fullcalendar复发事件(http://stackoverflow.com/q/15161654/35070)? – phihag

+0

谢谢你的建议,但我只有在我的数据库表中开始和结束日期。 –

+0

结合#phihag建议和#mplungjan解决方案后,现在好了,我终于得到了我想要的!! –

回答

1

下面是一个工作版本

function pad(num) { 
 
    return String("0" + num).slice(-2); 
 
} 
 

 
function formatDate(d) { 
 
    return d.getFullYear() + "-" + pad(d.getMonth() + 1) + "-" + pad(d.getDate()) 
 
} 
 
var aDay = 24 * 60 * 60 * 1000, 
 
    range = { // your range 
 
    start: new Date(2017, 3, 1), // remember month is 0 based 
 
    end: new Date(2017, 5, 30) 
 
    }, 
 
    ranges = []; 
 

 
console.log("start", range.start, "end", range.end) 
 

 
for (var i = range.start.getTime(), end = range.end.getTime(); i <= end;) { 
 
    var first = new Date(i), 
 
    last = new Date(first.getFullYear(), first.getMonth() + 1, 0); // last day of the month 
 
    ranges.push({ 
 
    start: formatDate(first), 
 
    end: formatDate(last) 
 
    }) 
 
    i = last.getTime() + aDay; 
 
    // if (!confirm(formatDate(new Date(i)))) break 
 
} 
 
console.log(ranges)

+0

Thankx很多@mplungjan .. –

相关问题