- 当天零点时间戳
const todayStart = new Date(new Date().toLocaleDateString()).getTime();
2.当天二十三点五十九分时间戳
const todayEnd = new Date(new Date().toLocaleDateString()).getTime() + 24 * 60 * 60 * 1000 - 1;
3.当周日二十三点五十九分点时间戳
function getWeekEnd() {
const now = new Date();
const day = now.getDay() === 0 ? 7 : now.getDay();
return todayEnd + ((7 - day) * 24 * 60 * 60 * 1000);
}
const weekEnd = getWeekEnd();
4.两段时间取交集
- 背景:有这么一段时间,他是可以自动搜索的,即el-date-picker有开始和结束时间这种(如下图),每次点击搜索的时间,需要和四个不同的时间段进行对比
// 四个不同的时间段
过往时间: start1: 0, end1:当天零点时间戳 // const todayStart = new Date(new Date().toLocaleDateString()).getTime();
今日截止时间: start2: 当天零点时间戳, end2: 当天二十三点五十九分时间戳 // const todayEnd = new Date(new Date().toLocaleDateString()).getTime() + 24 * 60 * 60 * 1000 - 1;
本周截止时间: start3:当天二十三点五十九分时间戳 end3: 当周日二十三点五十九分点时间戳
未来时间: start4: 当周日二十三点五十九分点时间戳 end4: 0
5.判断
// 第一、二种情况:
var start1 = 1667750400000 // 2022-11-07
var end1 = 1668614400000 // 2022-11-17
var start2 = 1667232000000 // 2022-11-01
var end2 = 1668873600000 // 2022-11-20
// 第三种情况:
// var start1 = 1667232000000 // 2022-11-01
// var end1 = 1668873600000 // 2022-11-20
// var start2 = 1667750400000 // 2022-11-07
// var end2 = 1668614400000 // 2022-11-17
var myStart = undefined
var myEnd = undefined
function intersection(start1, end1, start2, end2) {
if (start1 >= start2 && start1 <= end2) {
myStart = start1 >= start2 ? start1 : start2;
myEnd = end1 >= end2 ? end2 : end1;
console.log(myStart, myEnd, '111111111111');
return true;
} else if (end1 >= start2 && end1 <= end2) {
myStart = start1 >= start2 ? start1 : start2;
myEnd = end1 >= end2 ? end2 : end1;
console.log(myStart, myEnd, '2222222222222');
return true;
} else if (start1 <= start2 && end1 >= end2) {
myStart = start1 >= start2 ? start1 : start2;
myEnd = end1 >= end2 ? end2 : end1;
console.log(myStart, myEnd, '333333333333');
return true;
} else {
myStart = '无';
myEnd = '无';
console.log(myStart, myEnd, '44444444444');
return false;
}
}
console.log(intersection(start1, end1, start2, end2));
5.换一种思路,区间取大小值
- 需要对比的两段时间,开始start进行对比,取最大值max
- 结束时间进行对比,取最小值
if (reqParams.deadlineStart && reqParams.deadlineEnd) {
const start = Math.max(scheduledEndTimeStart, reqParams.deadlineStart);
let end; // 第四个区间end无穷大的时候,是0,需要特殊处理一下
if (scheduledEndTimeEnd === 0) {
end = reqParams.deadlineEnd;
} else {
end = Math.min(scheduledEndTimeEnd, reqParams.deadlineEnd);
}
if (start > end) { // 此时表示没有交集
scheduledEndTimeStart = '';
scheduledEndTimeEnd = '';
} else if (start <= end) { // 此时有交集
scheduledEndTimeStart = start;
scheduledEndTimeEnd = end;
}
delete reqParams.deadlineStart;
delete reqParams.deadlineEnd;
}