javascript - 如何按给定月份获取总月份

标签 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 个月(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/

相关文章:

javascript - window.open 样式使用 css

javascript - 无法使用 ng-option 选择数组的最后一个值

javascript - 尽管出现警告消息,表单仍被提交

javascript - AngularJS 分页只显示一页

javascript - 将 Angular 1.x Controller 转换为 TypeScript 时出现问题

javascript - AngularJS $scope 数据没有显示任何内容

javascript - 使用名称初始化 ng-app 会禁用变量初始化

javascript - 格式日期为 "yyyy-MM-dd' T'HH :mm:ss. SSS'Z'"

javascript - Node JS : Route. get() 需要一个回调函数,但在使用 ES6 模块时得到了一个 [对象未定义]

javascript - 可以从 Controller 更新工厂,但不能从指令更新工厂