Javascript 没有闰日的两个日期之间的差异
我有开始日期和结束日期,我必须得到这两个日期之间的差异,但条件是,如果是闰年,我必须排除2月29日。我可以通过momentJS获得两个日期之间的差异。但如果2月29日在该日期范围内,如何排除该日期 例如:Javascript 没有闰日的两个日期之间的差异,javascript,momentjs,Javascript,Momentjs,我有开始日期和结束日期,我必须得到这两个日期之间的差异,但条件是,如果是闰年,我必须排除2月29日。我可以通过momentJS获得两个日期之间的差异。但如果2月29日在该日期范围内,如何排除该日期 例如: //闰年 var startDate=力矩('2020-02-27') var endDate=时刻('2020-03-01') log('Diff in leap year',endDate.Diff(startDate,'days')//结果:3 var startDate1=力矩('2
//闰年
var startDate=力矩('2020-02-27')
var endDate=时刻('2020-03-01')
log('Diff in leap year',endDate.Diff(startDate,'days')//结果:3
var startDate1=力矩('2018-02-27')
var endDate1=力矩('2018-03-01')
log('non-leap year中的Diff',endDate1.Diff(startDate1',days')//结果:2
您可以使用.isLeapYear()
检查起始日期是否为闰年,然后相应地减去1
函数getDiff(开始日期、结束日期){
var isLeapYear=startDate.isLeapYear();
返回endDate.diff(开始日期,'天')-(isLeapYear?1:0);
}
var startDate=力矩('2020-02-27')
var endDate=时刻('2020-03-01')
log('Diff in leap year',getDiff(startDate,endDate));
var startDate1=力矩('2018-02-27')
var endDate1=力矩('2018-03-01')
log('Diff in non leap year',getDiff(startDate1,endDate1))代码>
您可以使用.isLeapYear()
检查这是否是闰年,如果是,您可以从结果中再减去一天:
function diffDates(startDate, endDate) {
var diff = endDate.diff(startDate, 'days');
while(startDate < endDate) {
if(startDate.isLeapYear() &&
moment(`${startDate.year()}-02-29`).isBetween(startDate, endDate)) {
diff--;
}
startDate.year(startDate.year() + 1);
}
return diff;
}
var startDate = moment('2020-02-27')
var endDate = moment('2020-03-01')
console.log('Leap year days diff: ' + diffDates(startDate, endDate)); // 2
startDate = moment('2018-02-27')
endDate = moment('2018-03-01')
console.log('Non leap year days diff: ' + diffDates(startDate, endDate)); // 2
startDate = moment('2019-02-27')
endDate = moment('2020-03-01')
console.log('Between leap year days diff: ' + diffDates(startDate, endDate)); // 367
函数diffDates(开始日期、结束日期){
var diff=endDate.diff(开始日期,'天');
while(开始日期<结束日期){
如果(startDate.isLeapYear()&&
时刻(${startDate.year()}-02-29`).isBetween(startDate,endDate)){
差异--;
}
起始日期年(起始日期年()+1);
}
返回差;
}
var startDate=力矩('2020-02-27')
var endDate=时刻('2020-03-01')
console.log('Leap year days diff:'+diffDates(startDate,endDate));//2.
起始日期=力矩('2018-02-27')
结束日期=时刻('2018-03-01')
console.log('Non-leap year days diff:'+diffDates(startDate,endDate));//2.
起始日期=力矩('2019-02-27')
结束日期=时刻('2020-03-01')
console.log('闰年天数之间的差异:'+diffDates(startDate,endDate));//367
我添加了一个子句,使用.isBetween()
,知道您的日期是否在2月29日和闰年之间,并创建了一个while
循环,每次闰日在间隔内时从diff
中减去1
查看它的工作情况。使用.isLeapYear()
您可以迭代日期范围之间的所有年份,并获得预期结果
function dateDiff(startStr, endStr) {
var startDate = moment(startStr);
var endDate = moment(endStr);
var diff = endDate.diff(startDate, 'days');
for (var year = startDate.year(); year <= endDate.year(); year++) {
var date = moment(year + '-02-29');
if (date.isBetween(startDate,endDate) && date.isLeapYear()) {
diff -= 1;
}
}
return diff;
}
console.log(dateDiff('2020-02-27', '2020-03-01'));
console.log(dateDiff('2018-02-27', '2018-03-01'));
函数dateDiff(startStr,endStr){
var startDate=力矩(startStr);
var endDate=力矩(endStr);
var diff=endDate.diff(开始日期,'天');
对于(var year=startDate.year();year您可以尝试以下方法:
- 检查所选年份是否为闰年
- 如果是,检查日期范围是否涵盖2月29日
- 如果是,则减去1,否则为0
函数getDiff(开始日期、结束日期){
var dayToExclude=时刻('29/02/'+起始日期年(),'DD/MM/YYYY');
var excludeDays=startDate.isLeapYear()&&startDate.isBefore(dayToExclude)和&endDate.isAfter(dayToExclude)?1:0;
返回endDate.diff(开始日期,'天')-不包括天;
}
var startDate=力矩('2020-02-27')
var endDate=时刻('2020-03-01')
log('Diff in leap year',getDiff(startDate,endDate));
var startDate1=力矩('2018-02-27')
var endDate1=力矩('2018-03-01')
log('Diff in non leap year',getDiff(startDate1,endDate1));
您所能做的就是通过startDate.isLeapYear()检查是否为闰年
如果是这样的话,你可以从结果中再减去一天。如果闰日在开始日期和结束日期之间,你只想减去。那么跨越几年的范围是什么?2019-12-31到2020-03-01…或者包括一个或多个闰年的大范围。但是对于简单的情况,这看起来不错。我假设日期在同一年内。问题状态不同误差可能超过一年,所以对这个问题来说可能不是一个安全的假设。这正如我所预期的那样有效,有什么最佳的解决方案吗?