Javascript 如何按给定的月份获取总月份

Javascript 如何按给定的月份获取总月份,javascript,angularjs,Javascript,Angularjs,我有一个这样的数组 var array = [ { date:2014-11-11, title:test }, { date:2014-11-12, title:test }, { date:2014-11-13, title:test }, …more …more { date:20

我有一个这样的数组

var array = [ 
           { date:2014-11-11,
             title:test },
           { date:2014-11-12,
             title:test },
           { date:2014-11-13,
             title:test },
           …more
           …more
           { date:2015-01-01
             title:test},
           { date:2015-01-02
             title:test},
           …more
           …more
           { date:2015-03-01
             title:test}
]
我的问题是如何得到每年的月份总数。 例如,我需要在2014年有2个月(11月至12月),在2015年有3个月(1月至3月)

我不确定下一步我能做什么来获得一年中的总月份数


有人能帮我吗?谢谢

如果你在处理日期和时间,你可能应该考虑使用一个库,因为工作日期和时间有很多细微差别

我只是做了一些类似的事情,然后用和

查看文档中的时间范围,您似乎可以执行以下操作:

var start = new Date(2012, 2, 1);
var end   = new Date(2012, 7, 5);
var range1 = moment().range(start, end);

range1.by('months', function(moment) {
  // Do something with `moment`
});

您的数组语法不是有效的javascript。您是否真的有如下日期字符串:

date: '2014-11-11',
或者该值是表示该日期的日期对象?日期是本地的还是UTC的?不管怎样,我假设您有字符串,它们是UTC还是本地并不重要

我的问题是如何得到每年的月份总数。例如,我需要在2014年有2个月(11月至12月),在2015年有3个月(1月至3月)

我不太确定您想要什么,您应该提供一个预期输出的示例。以下返回特定年份的月份范围,字符串不转换为日期:

// Sample data
var array = [ 
       { date:'2014-11-11',
         title:'test'},
       { date:'2014-11-12',
         title:'test'},
       { date:'2014-11-13',
         title:'test'},
       { date:'2015-01-01',
         title:'test'},
       { date:'2015-01-02',
         title:'test'},
       { date:'2015-03-01',
         title:'test'}
];
以及功能:

function getMonthCount2(arr) {
  var yearsMonths = arr.map(function(v){return v.date.substr(0,7).split(/\D/)}).sort();
  var monthRanges = {}
  yearsMonths.forEach(function(v,i) {
    if (monthRanges[v[0]]) {
      monthRanges[v[0]] += v[1] - yearsMonths[--i][1];
    } else {
      monthRanges[v[0]] = 1;
    }
  });
  return monthRanges;
}

console.log(getMonthCount2(array)); // {'2014': 2, '2015': 3}

以上假设输入有效,在将数据传递给函数之前,您可能需要执行验证步骤以确保数据是干净的。

您的问题不清楚。你所说的“总月份”是什么?阵列中每年的最新日期?如果这是一个范围,为什么不将其表示为一个范围而不是每个日期?“total month”是否仅为真?该月的所有天数是否都存在于数组中?
function getMonthCount2(arr) {
  var yearsMonths = arr.map(function(v){return v.date.substr(0,7).split(/\D/)}).sort();
  var monthRanges = {}
  yearsMonths.forEach(function(v,i) {
    if (monthRanges[v[0]]) {
      monthRanges[v[0]] += v[1] - yearsMonths[--i][1];
    } else {
      monthRanges[v[0]] = 1;
    }
  });
  return monthRanges;
}

console.log(getMonthCount2(array)); // {'2014': 2, '2015': 3}