如何获得给定月份的总月份

时间:2014-11-24 23:16:46

标签: 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:2015-01-01
             title:test},
           { date:2015-01-02
             title:test},
           …more
           …more
           { date:2015-03-01
             title:test}
]

我的问题是如何获得每年的总月份。 例如,我需要在2014年2个月(nov到dec)和2015年3个月(1月到3月)。

var firstYear  = parseInt($filter('date')(array[0].date, 'yyyy'));
var lastYear = parseInt($filter('date')(array[array.length-1].date, 'yyyy'));

我不知道接下来我能做些什么来获得一年中的总月份

任何人都可以帮我吗?谢谢!

2 个答案:

答案 0 :(得分:1)

您的数组语法无效javascript。你真的有日期字符串,如:

date: '2014-11-11',

或者是表示该日期的Date对象的值?日期是本地还是UTC?无论如何,我会假设你有字符串,无论是UTC还是本地都没关系。

  

我的问题是如何获得每年的总月份。例如,我需要在2014年2个月(nov到dec)和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}

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

答案 1 :(得分:0)

如果您正在处理日期和时间,您应该考虑使用图书馆,因为有许多细微差别与工作日期和时间一致。

我刚刚做了类似的事情,我使用moment jsdate range extension解决了这个问题。

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

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`
});