我如何在一个javascript数组的momentjs日期中得到适合给定月份的日期数?

时间:2015-02-16 07:02:23

标签: javascript arrays momentjs

我有一个特定的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年11月,我如何确定该月和年内的日期数?由于我的阵列的日期超过3年。

我的最终目标是使用计数创建一种类似甘特图并使用colspan =""在基于日期数的月标题上。

我所拥有的信息是日期数组以及我想检查的月份和年份。

这样的东西
return GetDateCounts(Month, Year){
   return dateArry.map.indexOf(moment(startDate).month() == Month && moment(startDate).year() == Year)
}

编辑:没有重复。

示例:

如果我有2013年11月21日至30日的日期,那应该是9天或9天。 如果我有21个重复日期,我会想忽略它,但仍然只有9个。

1 个答案:

答案 0 :(得分:0)

好的,我设法使用了这个复杂的功能,但是我确信必须有更好/更快,更少的代码行。注意我必须展平我的复杂对象因为我无法弄清楚如何遍历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;