javascript - 当一个日期在前一年时比较两个日期
问题描述
我有这个函数可以确定两组日期是否重叠。当日期集在同一年时,它可以正常工作,如果有重叠则返回 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) };
解决方案
- 在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();
- 比较时间:
if (($dates.endDate1 >= $dates.startDate2 && $dates.startDate1 <= $dates.endDate2) ||
($dates.endDate2 >= $dates.startDate1 && $dates.startDate2 <= $dates.endDate1)) {
// etc...
}
推荐阅读
- visual-studio-code - 我可以在 VS Code 中使用带有 Emmet 的 jsx/tsx 的 `styleName` 而不是 `className`
- powerbi - Power bi:只要你有某个变量的值,就计算一个函数
- javascript - 异步发布父子对象和关系(递归?)
- amazon-ses - Amazon SES 电子邮件身份验证需要错误
- css - 下边距及其结果
- ruby - 通过别名运行 ruby 时获取真正的工作目录
- javascript - 将数组的每个单独项作为纯字符串返回
- neovim - 在 neovim 的特定窗口中禁用语法高亮
- python - 两次调用函数,但在第二次,函数返回的第一个列表在 python 中作为参数
- c - 使用 sscanf 解析和动态分配大小不一致的子字符串