2014-11-24 40 views
0

我有這樣如何給出個月獲得的總月

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月)和3個月(一月至至三月)在2015年

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

我不知道我能做些什麼旁邊獲得總月全年

任何人都可以幫助我嗎?謝謝!

+0

你的問題不清楚。你指的是「總月份」是什麼?陣列中每年的最新日期?如果這是一個範圍,爲什麼不表示是範圍,而不是每個日期單獨? 「總月份」只有在該月份的所有天數存在於數組中嗎? – Enzey 2014-11-24 23:43:57

回答

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

你數組的語法是無效的JavaScript。你真的有日期字符串,如:

date: '2014-11-11', 

或是一個Date對象代表該日期的值?日期是本地還是UTC?無論如何,我會假設你有字符串,無論是UTC還是本地無關緊要。

我的問題是如何獲得每年的總月份。例如,我需要在2014年和2014年3個月(1月至3月),2個月(2015年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} 

上述假設有效輸入,你可以把它放到一個驗證步驟,以確保數據在傳遞到函數前是乾淨的。