【发布时间】:2020-09-11 17:17:32
【问题描述】:
我有这个函数可以确定两组日期是否重叠。当日期集在同一年时,它可以正常工作,如果有重叠则返回 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 重叠,上述表达式也无法检测到重叠。
我尝试使用 moment 和 regex 来格式化日期,但无济于事。任何想法我做错了什么?
编辑:这是我使用时刻的方式:
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) };
【问题讨论】:
-
你比较的是字符串而不是日期。
-
.format(..)返回一个string,这意味着所有的值都是字符串。你应该使用moment(value.startDate, "MM/DD/YYYY")。
标签: javascript momentjs