Sunday, May 19, 2024
 Popular · Latest · Hot · Upcoming
118
rated 0 times [  120] [ 2]  / answers: 1 / hits: 38356  / 9 Years ago, tue, may 26, 2015, 12:00:00

I have two date strings like this:



var startDate = '2012-04-01';
var endDate = '2014-11-01';


And I want to end up with an array of strings like this:



var dates = ['2012-04-01', '2012-05-01', '2012-06-01' .... '2014-11-01',];


So far this is what I've got, but it's pretty ugly:



var startDate = '2012-04-01';
var endDate = '2014-11-01';
var start = new Date(Date.parse(startDate));
var end = new Date(Date.parse(endDate))
var dates = [];
for (var i = start.getFullYear(); i < end.getFullYear() + 1; i++) {
dates.push(i + '-' + '-01');
}
console.log(dates);


Is there a better way? JSFiddle.


More From » javascript

 Answers
27

This should produce the desired output:



function dateRange(startDate, endDate) {
var start = startDate.split('-');
var end = endDate.split('-');
var startYear = parseInt(start[0]);
var endYear = parseInt(end[0]);
var dates = [];

for(var i = startYear; i <= endYear; i++) {
var endMonth = i != endYear ? 11 : parseInt(end[1]) - 1;
var startMon = i === startYear ? parseInt(start[1])-1 : 0;
for(var j = startMon; j <= endMonth; j = j > 12 ? j % 12 || 11 : j+1) {
var month = j+1;
var displayMonth = month < 10 ? '0'+month : month;
dates.push([i, displayMonth, '01'].join('-'));
}
}
return dates;
}


Just call it with your existing date format:



dateRange('2013-11-01', '2014-06-01')
// [2013-11-01, 2013-12-01, 2014-01-01, 2014-02-01, 2014-03-01, 2014-04-01, 2014-05-01, 2014-06-01, 2014-07-01, 2014-08-01, 2014-09-01, 2014-10-01, 2014-11-01, 2014-12-01]

[#66464] Sunday, May 24, 2015, 9 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
ishmaelw

Total Points: 528
Total Questions: 96
Total Answers: 103

Location: Venezuela
Member since Sat, Apr 24, 2021
3 Years ago
;