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}