如何使用moment.js列出2个日期之间的所有月份?
我有两个日期如何使用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