Как я могу получить количество дат, которые соответствуют данному месяцу в javascript-массиве дат momentjs?

У меня есть конкретный массив дат:

Схема:

tasks.data: [ {startDate: Mon Nov 25 2013 20:32:28 GMT-0500 (Eastern Standard Time)}, {startDate: Tue Nov 26 2013 20:32:28 GMT-0500 (Eastern Standard Time)}, {startDate: Wed Nov 27 2013 20:32:28 GMT-0500 (Eastern Standard Time)}, {startDate: Thu Nov 28 2013 20:32:28 GMT-0500 (Eastern Standard Time)}, {startDate: Fri Nov 29 2013 20:32:28 GMT-0500 (Eastern Standard Time)}
]

остальная часть данных..

Mon Nov 25 2013 20:32:28 GMT-0500 (Eastern Standard Time)
Tue Nov 26 2013 20:32:28 GMT-0500 (Eastern Standard Time)
Wed Nov 27 2013 20:32:28 GMT-0500 (Eastern Standard Time)
Thu Nov 28 2013 20:32:28 GMT-0500 (Eastern Standard Time)
Fri Nov 29 2013 20:32:28 GMT-0500 (Eastern Standard Time)
Sat Nov 30 2013 20:32:28 GMT-0500 (Eastern Standard Time)
Sun Dec 01 2013 20:32:28 GMT-0500 (Eastern Standard Time)
Mon Dec 02 2013 20:32:28 GMT-0500 (Eastern Standard Time)
Tue Dec 03 2013 20:32:28 GMT-0500 (Eastern Standard Time)
Wed Dec 04 2013 20:32:28 GMT-0500 (Eastern Standard Time)
Thu Dec 05 2013 20:32:28 GMT-0500 (Eastern Standard Time)
Fri Dec 06 2013 20:32:28 GMT-0500 (Eastern Standard Time)

Дайте сказать месяц ноября 2013 года, как я могу определить количество дат, которые относятся к этому месяцу и году? Поскольку мой массив имеет даты, которые охватывают более 3 лет.

Моя конечная цель - использовать счет в создании своего рода диаграммы gantt и использовать colspan = "" в заголовке месяца в зависимости от количества дат.

У меня есть информация о количестве дат и месяца и года, которые я хочу проверить.

Что-то вроде

return GetDateCounts(Month, Year){ return dateArry.map.indexOf(moment(startDate).month() == Month && moment(startDate).year() == Year)
}

Изменение: без дубликатов.

Пример:

Если у меня есть даты с 21 по 30 ноября 2013 года, это должно быть 9 или 9 дней. Если у меня есть две повторяющиеся даты для 21-го числа, я бы хотел проигнорировать это и все еще иметь счет 9.

1 ответ

Хорошо, я справился с этой запутанной функцией, которая работает, но я уверен, что для этого нужно быть лучше/быстрее, меньше строк кода. Заметьте, мне пришлось сгладить мой сложный объект, потому что я не мог понять, как перебирать data.startDate, поэтому я создал плоский массив дат в vm.dates.

Если кто-то может придумать лучший способ, я дам им ответ.

var uniqueDates = []; var count = 0; var unique = false; vm.dates.forEach(function (date) { if (moment(date).month() == month && moment(date).year() == year) { unique = true; //Attempt to find previous "day" in unique array list uniqueDates.forEach(function (uniqueDate) { if (moment(uniqueDate).date() == moment(date).date()) { //If found set Unique to False unique = false; } }); if (unique == true) { //If Unique count count++; //and add found date to the Unique List uniqueDates.push(date); unique = false; } }; }); return count;

licensed under cc by-sa 3.0 with attribution.