//根据 @CRIMX 的答案进行了修改后的逻辑:
var dateArr1 = [
{
ts: '2017-07-22 00:00:00',
tn: '2017-07-23 09:00:00',
},
{
ts: '2017-07-23 10:00:00',
tn: '2017-07-23 20:00:00',
},
{
ts: '2017-07-23 20:00:00',
tn: '2017-07-23 24:00:00',
}
];
function is24HoursInOneDay(data = [], oneDay) {
// cs 指定某天的00:00:00
// cn 指定某天的24:00:00
let start = 0;
let end = 0;
cs = +new Date(`${oneDay} 00:00:00`);
cn = +new Date(`${oneDay} 24:00:00`);
let sortData = sortDateArr(data); // 根据时间戳,对时间数组进行排序
for (let i = 0; i < sortData.length; i++) {
const ts = sortData[i].ts;// 开始
const tn = sortData[i].tn;// 结束
if (ts <= cs) { // 在当天之前
start = cs;
if (tn < cn) {
// 结束时间小于当天,继续保留计算
if (tn > end) { end = tn }
} else {
return true;
}
}
if (ts > cs) {
if (ts > end) {
// 时间出现间断,当天肯定不满足连续24小时
return false;
} else {
if (tn > end) { end = tn }
}
}
}
return end - start >= 86400000;
}
function sortDateArr(data = []) {
return data.map((D) => ({
ts: +new Date(D.ts),
tn: +new Date(D.tn),
}))
.sort((a, b) => a.ts - b.ts);
}
console.log(
is24HoursInOneDay(dateArr1, '2017-07-23')
)
==========================================================
当碰到一个数组,里边有一组时间数组,数组长度不定(内部对象时间段对象固定),如何有效的判断这个数组里的时间段,正好连续满足了24小时,完整的一天呢?
大家有没有好的思路,分享一下。。。
// dateArr1里的时间段满足了7-23是满了24小时的。
var dateArr1 = [
{
ts: '2017-07-23 00:00:00',
tn: '2017-07-23 10:00:00',
},
{
ts: '2017-07-23 10:00:00',
tn: '2017-07-23 20:00:00',
},
{
ts: '2017-07-23 21:00:00',
tn: '2017-07-23 24:00:00',
},
{
ts: '2017-07-22 21:00:00',
tn: '2017-07-23 24:00:00',
}
];
// dateArr2里的时间段则不满足7-23整天。
var dateArr2 = [
{
ts: '2017-07-23 00:00:00',
tn: '2017-07-23 10:00:00',
},
{
ts: '2017-07-23 10:00:00',
tn: '2017-07-23 20:00:00',
},
{
ts: '2017-07-23 21:00:00',
tn: '2017-07-23 24:00:00',
},
];
数组里面的时间,不会同一天的,有可能跨天,也有可能跨月。
年月时分秒都会出现,
但是ts永远会比tn要小。
大概是每天都会拿到这么个数组,匹配当天的情况,是否在这个数组里,充满了完整的24小时。
讨论了一番重新修改,供参考