将日期范围与 moment.js 进行比较
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 日(你实际上会得到 1 月 7 日, 2019).
我不确定导致减去一天的条件应该是什么。 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
}
我正在尝试获得以下输出:
这是我的代码:
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 日(你实际上会得到 1 月 7 日, 2019).
我不确定导致减去一天的条件应该是什么。 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
}