【问题标题】:How could I get the number of dates that fit a given month in a javascript array of momentjs dates?如何在momentjs日期的javascript数组中获取适合给定月份的日期数?
【发布时间】:2015-02-16 07:02:23
【问题描述】:

我有一个特定的 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 个计数。

【问题讨论】:

  • 除非需要引用日期,否则您似乎在正确的轨道上

标签: javascript arrays momentjs


【解决方案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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-14
    相关资源
    最近更新 更多