我有兩個日期如何使用moment.js列出2個日期之間的所有月份?
2015-3-30 2013-8-31
我怎麼能做出這樣一個月列表:
[ '2015-3', '2015-2', '2015-1', '2014-12', '2014-11', '2014-10', '2014-09', '2014-08', '2014-07', '2014-06', '2014-05'....., '2013-08' ]
感謝。
我有兩個日期如何使用moment.js列出2個日期之間的所有月份?
2015-3-30 2013-8-31
我怎麼能做出這樣一個月列表:
[ '2015-3', '2015-2', '2015-1', '2014-12', '2014-11', '2014-10', '2014-09', '2014-08', '2014-07', '2014-06', '2014-05'....., '2013-08' ]
感謝。
這應做到:
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');
}
你可以試試這個例子
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);
感謝您的回答,但你的代碼中有一些問題,如果datediffs更多的則是2年,您可以檢查此琴:https://jsfiddle.net/jcoyace0/ – 2015-04-06 12:54:46
感謝您的幫助,它工作在罰款鉻,但我在Firefox中無效的日期,我正在尋找一個解決方案,這個錯誤 – 2015-04-08 20:33:58
您正在使用多種格式輸出: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>
我覺得原來的答案是不完全正確的,因爲你不會得到你的數組中'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');
}
這是一個完美的解決方案,「上個月怎麼樣? 「主要接受答案的問題。感謝您的加入!這個應該收到最多的讚譽。 – LStarky 2017-07-21 17:48:31
如果你選擇一個日期範圍 - 2016-08-16至2017-02-15,這個邏輯本身是沒有幫助的。因爲'2017年2月'不會被添加。只是因爲在最後一次迭代的開始日期將是2017-02-16,大於2017-02-15 – 2017-02-16 05:56:59
Alexander Swann(下文)的更正是最好的答案,並糾正了這個月底失蹤的問題。 – LStarky 2017-07-21 17:49:12
更正添加到我的答案以及...其實我想刪除,以便固定的人留下來,但我的答案需要'接受'刪除 – vinjenzo 2018-01-13 18:46:58