我有一个像这样的数组
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 firstYear = parseInt($filter('date')(array[0].date, 'yyyy'));
var lastYear = parseInt($filter('date')(array[array.length-1].date, 'yyyy'));
我不知道接下来我可以做什么来获取一年中的总月份
谁能帮我解决这个问题吗?谢谢!
最佳答案
您的数组语法不是有效的 JavaScript。你真的有像这样的日期字符串吗:
date: '2014-11-11',
或者该值是代表该日期的 Date 对象吗?日期是本地日期还是 UTC?不管怎样,我假设你有字符串,它们是 UTC 还是本地的并不重要。
My questions is how to get the total month of each year. For example, I need to have 2 months (nov to dec) in 2014 and 3 months (Jan to March) in 2015.
我不太确定你想要什么,你应该提供一个预期输出的示例。以下返回特定年份的月份范围,没有字符串到日期的转换:
// 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}
上面假设输入有效,您可能需要在将数据传递给函数之前进行验证步骤以确保数据干净。
关于javascript - 如何按给定月份获取总月份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27116002/