2015-04-06 37 views

回答

24

這應做到:

var dateStart = moment('2013-8-31'); 
var dateEnd = moment('2015-3-30'); 
var timeValues = []; 

while (dateEnd > dateStart || dateStart.format('M') === dateEnd.format('M')) { 
    timeValues.push(dateStart.format('YYYY-MM')); 
    dateStart.add(1,'month'); 
} 
+2

如果你選擇一個日期範圍 - 2016-08-16至2017-02-15,這個邏輯本身是沒有幫助的。因爲'2017年2月'不會被添加。只是因爲在最後一次迭代的開始日期將是2017-02-16,大於2017-02-15 – 2017-02-16 05:56:59

+1

Alexander Swann(下文)的更正是最好的答案,並糾正了這個月底失蹤的問題。 – LStarky 2017-07-21 17:49:12

+0

更正添加到我的答案以及...其實我想刪除,以便固定的人留下來,但我的答案需要'接受'刪除 – vinjenzo 2018-01-13 18:46:58

1

你可以試試這個例子

var one = moment("2015-3-30"); 
    var two = moment("2014-8-31"); 
    var dateDiffs = []; 
    var count = Math.round(moment.duration(one.diff(two)).asMonths()); 

    month = two.month() + 1; 
    year = two.year(); 

    for (var i=1; i<=count; i++) { 
     if (month > 12) { 
     month = 1; 
     year++; 
     } 
     dateDiffs.push(year+"-"+month); 
     console.log(month); 
     month++; 
    } 

    console.log(dateDiffs); 
+0

感謝您的回答,但你的代碼中有一些問題,如果datediffs更多的則是2年,您可以檢查此琴:https://jsfiddle.net/jcoyace0/ – 2015-04-06 12:54:46

+0

感謝您的幫助,它工作在罰款鉻,但我在Firefox中無效的日期,我正在尋找一個解決方案,這個錯誤 – 2015-04-08 20:33:58

3

您正在使用多種格式輸出:YYYY-MM和YYYY-M,所以我選擇了先。您可以根據需要進行編輯。

var startDateString = "2012-5-30"; 
 
var endDateString = "2015-8-31"; 
 
var startDate = moment(startDateString, "YYYY-M-DD"); 
 
var endDate = moment(endDateString, "YYYY-M-DD").endOf("month"); 
 

 
var allMonthsInPeriod = []; 
 

 
while (startDate.isBefore(endDate)) { 
 
    allMonthsInPeriod.push(startDate.format("YYYY-MM")); 
 
    startDate = startDate.add(1, "month"); 
 
}; 
 

 
console.log(allMonthsInPeriod); 
 

 
document.getElementById("result").innerHTML = allMonthsInPeriod.join("<br />");
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.4/moment.min.js"></script> 
 
<div id="result"></div>

8

我覺得原來的答案是不完全正確的,因爲你不會得到你的數組中'2015-3'。這是由於您的開始日期最終會以'2015-3-31'結束,並且會導致條件失效。你可以像下面那樣擴展它。

var dateStart = moment('2013-8-31'); 
var dateEnd = moment('2015-3-30'); 
var timeValues = []; 

while (dateEnd > dateStart || dateStart.format('M') === dateEnd.format('M')) { 
    timeValues.push(dateStart.format('YYYY-MM')); 
    dateStart.add(1,'month'); 
} 
+1

這是一個完美的解決方案,「上個月怎麼樣? 「主要接受答案的問題。感謝您的加入!這個應該收到最多的讚譽。 – LStarky 2017-07-21 17:48:31

相關問題