Я пытаюсь создать функцию, которая будет принимать три входные переменные (дата начала, дата окончания, зернистость) и выведет массив со всеми датами между ними. Выход будет либо ежедневной, либо ежемесячной детализацией на основе ввода. Например, если я смотрю на январь 2015 - февраль 2015:Javascript массив обеспечивает все дни/месяцы между двумя диапазонами дат
- Ежемесячно будет [2015-01, 2015-02]
- Ежедневно будет [2015-01-01, 2015-01- 02, 2015-01-03, ...., 2015-02-27, 2015-02-28]
Я закодировал что-то, основанное на некоторых других сообщениях, и логически кажется, что он должен работать я, но по какой-то причине, глядя на ежедневную гранулярность, каждый месяц возвращается с 31 днем. В приведенном ниже скрипте рассматривается только ежедневная гранулярность (ежемесячно будет легче сделать) - может кто-то взглянуть и посмотреть, что я делаю неправильно, и если есть более эффективный способ сделать это?
Входной формат дат «гггг-мм»
Я понимаю, что это, вероятно, новобранец ошибка, но, по крайней мере, я буду учиться :)
Благодаря
function dateRange2 (startDate,endDate,granularity) {
var dates = [];
var d0 = startDate.split('-');
var d1 = endDate.split('-');
var months31 = [1,3,5,7,8,10,12];
var months30 = [4,6,9,11];
for (var y = d0[0]; y <= d1[0]; y++) {
for (var m = d0[1]; m <= d1[1]; m++) {
if (m in months31) {
for (var d =1;d <=31; d++) {
dates.push(y+"-"+m+"-"+d);
}
} ///// Issue seems to be here - not switching over to next clause
else if (m in months30) {
for (var d =1; d <=30; d++) {
dates.push(y+"-"+m+"-"+d);
}
} else if (m=2 && y=2016) {
for (var d =1; d <=29; d++) {
dates.push(y+"-"+m+"-"+d);
}
} else if (m=2 && y!=2016) {
for (var d =1; d <=28; d++) {
dates.push(y+"-"+m+"-"+d);
}
}
}
}
return dates;
}
попробуйте использовать '.contains' вместо' .indexOf' – Quill