我有一个特定的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个。
答案 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;