[英]Compare Date range with moment.js
我正在尝试获得以下输出:
这是我的代码:
const start = "12/7/2018"; const end = "10/6/2019"; var startLease = moment(start, "MM/DD/YYYY"); var endLease = moment(end, "MM/DD/YYYY"); var array = []; var i = 0; var nextEnd; while (1 == 1) { var nextStart = nextEnd ? (nextEnd.date() > 28 ? nextEnd : nextEnd) : nextEnd || startLease.clone().add(i, 'M'); nextEnd = startLease.clone().add(i + 1, 'M') > endLease ? endLease : startLease.clone().add(i + 1, 'M'); if (nextEnd.date() > 28) { nextEnd.subtract(1, 'days') } else {} array.push(nextEnd.diff(nextStart, 'days')); if (nextEnd >= endLease) { break; } else {} i += 1 } console.log(array);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
问题:不是从去的7th-6th
,它会从7th-7th
每月。 我尝试了.subtract(1,'days'),但是没有输出正确的值。 但是,这在本月末有效。
任何帮助表示赞赏。 谢谢。
我在循环中添加了一些日志记录,并在一次迭代后将其切断。
对于您的示例,只有第一个月是错误的,因此,您的期望是,如果在2018年12月7日之前增加1个月,您将获得2019年1月6日的收入(实际上您将获得2019年1月7日的收入)。
我不确定导致减去一天的情况应该怎么做。 nextEnd.date()将解析为该月的一天,对于您的示例,该日期始终小于28。
const start = "12/7/2018"; const end = "10/6/2019"; var startLease = moment(start, "MM/DD/YYYY"); var endLease = moment(end, "MM/DD/YYYY"); var array = []; var i = 0; var nextEnd; while (1 == 1) { var nextStart = nextEnd ? (nextEnd.date() > 28 ? nextEnd : nextEnd) : nextEnd || startLease.clone().add(i, 'M'); console.log(nextStart); nextEnd = startLease.clone().add(i + 1, 'M') > endLease ? endLease : startLease.clone().add(i + 1, 'M'); console.log(nextEnd); if (nextEnd.date() > 28) { nextEnd.subtract(1, 'days') } else {} array.push(nextEnd.diff(nextStart, 'days')); if (nextEnd >= endLease) { break; } else {} i += 1; break; } console.log(array);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
这为我工作:
while(1==1){
var nextStart = nextEnd ? nextEnd : startLease.clone().add(i, 'M');
var tempstart = startLease.clone();
tempstart.date(1);
if (startLease.date() < endLease.date() && array.length == 0) {
i = -1;
}
tempstart.add(i + 1, 'M');
var days = [31, 28, 31, 30, 31, 30 ,31, 31, 30, 31, 30, 31];
var year = tempstart.year();
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
days[1] = 29;
if (endLease.date() > days[tempstart.month()]) {
tempstart.date(days[tempstart.month()]);
} else {
tempstart.date(endLease.date());
}
nextEnd = tempstart > endLease ? endLease : tempstart;
var diff_sum = nextEnd.diff(nextStart, 'days');
array.push (diff_sum);
if (nextEnd >= endLease) {
break;
}
i += 1
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.