我有一个像这样的数组
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'));
我不知道接下来我能做些什么来获得一年中的总月份
任何人都可以帮我吗?谢谢!
答案 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 js和date 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`
});