首页 > 解决方案 > 当一个日期在前一年时比较两个日期

问题描述

我有这个函数可以确定两组日期是否重叠。当日期集在同一年时,它可以正常工作,如果有重叠则返回 true。如果其中一个日期来自上一年,则比较无法检测到重叠。

例如:

var obj = { startDate1: "02/01/2020", 
            endDate1: "03/01/2020", 
            startDate2:"02/05/2020", 
            endDate2:"02/15/2020"  }

使用:

if ((obj.endDate1 >= obj.startDate2 && obj.startDate1 <= obj.endDate2) ||
    (obj.endDate2 >= obj.startDate1 && obj.startDate2 <= obj.endDate1)) {  
         
    }

由于日期重叠,因此返回 true。

但是,当 startDate1 在不同的年份(2019 年)时,如下所示:

var obj = { startDate1: "12/01/2019", 
                endDate1: "03/01/2020", 
                startDate2:"02/05/2020", 
                endDate2:"02/15/2020"  } 

即使 startDate1 和 endDate1 实际上与 startDate2 和 endDate2 重叠,上面的表达式也无法检测到重叠。

我尝试使用时刻和正则表达式来格式化日期,但无济于事。任何想法我做错了什么?

编辑:这是我使用时刻的方式:

                        const obj = {
                            startDate1: moment(new Date(value.startDate)).format("MM/DD/YYYY"),
                            endDate1: moment(new Date(value.endDate)).format("MM/DD/YYYY"),
                            startDate2: moment(new Date(startDate)).format("MM/DD/YYYY"),
                            endDate2: moment(new Date(endDate)).format("MM/DD/YYYY")
                        };

我传递给 new Date 的值是 iso 日期字符串。

对困惑感到抱歉..

编辑#2/答案:

我刚刚使用原生 JS Date.parse 转换了日期。

const obj = {
             certStart: Date.parse(value.startDate),
             certEnd: Date.parse(value.endDate),
             startDate: Date.parse(startDate),
             endDate: Date.parse(endDate)    };

标签: javascriptmomentjs

解决方案


  1. 在js中使用Native Date函数
var obj = { 
   startDate1: "02/01/2020", 
   endDate1: "03/01/2020", 
   startDate2:"02/05/2020", 
   endDate2:"02/15/2020"
};
// Create a clone of obj object and convert values to timestamp.
var $dates = {};
$dates.startDate1 = new Date(obj.startDate1).getTime();
$dates.startDate2 = new Date(obj.startDate2).getTime();
$dates.endDate1 = new Date(obj.endDate1).getTime();
$dates.endDate2 = new Date(obj.endDate2).getTime();
  1. 比较时间:
if (($dates.endDate1 >= $dates.startDate2 && $dates.startDate1 <= $dates.endDate2) ||
    ($dates.endDate2 >= $dates.startDate1 && $dates.startDate2 <= $dates.endDate1)) {  
         // etc...
}

推荐阅读