Javascript-使用日期时间数据循环到数组中,并检查日期是否在数组中的日期之间
我使用的是moment.js,我的数组/对象中有这种数据Javascript-使用日期时间数据循环到数组中,并检查日期是否在数组中的日期之间,javascript,momentjs,Javascript,Momentjs,我使用的是moment.js,我的数组/对象中有这种数据 [{"start_datetime":"05/18/2021 1:30pm","end_datetime":"05/18/2021 2:00pm"}, {"start_datetime":"05/18/2021 2:00pm","end_datetime":"05/18/2021 3:30
[{"start_datetime":"05/18/2021 1:30pm","end_datetime":"05/18/2021 2:00pm"},
{"start_datetime":"05/18/2021 2:00pm","end_datetime":"05/18/2021 3:30pm"},
{"start_datetime":"05/18/2021 1:30pm","end_datetime":"05/18/2021 3:30pm"}]
我想创建一个函数来读取这个数组,并检查数组中的值之间是否有值
示例:第一个键是{“开始日期时间”:“05/18/2021 1:30pm”,“结束日期时间”:“05/18/2021 2:00pm”}
位于最后一个键之间,最后一个键是{“开始日期时间”:“05/18/2021 1:30pm”,“结束日期时间”:“05/18/2021 3:30pm”}
我知道我们可以使用矩函数,但我正在考虑循环数组中所有值的最有效方法
提前谢谢
常数范围=[{
“开始日期时间”:“2021年5月18日下午1:30”,
“结束日期时间”:“2021年5月18日下午2:00”
},
{
“开始日期时间”:“2021年5月18日下午2:00”,
“结束日期时间”:“2021年5月18日下午3:30”
},
{
“开始日期时间”:“2021年5月18日下午1:30”,
“结束日期时间”:“2021年5月18日下午3:30”
}
];
//对于每个范围,比较每个范围
用于(范围常数d){
用于(范围常数){
如果(d==r)继续;//如果范围相等,则跳过
如果(
时刻(d.开始日期时间,“MM-DD-YYYY hh:MM:A”)>=时刻(r.开始日期时间,“MM-DD-YYYY hh:MM:A”)&&
瞬间(d.end_datetime,“MM-DD-YYYY hh:MM:A”)我能够用以下代码回答它:
const timeCollection = [{
"start_datetime": "05/18/2021 1:30pm",
"end_datetime": "05/18/2021 2:00pm"
},
{
"start_datetime": "05/18/2021 2:00pm",
"end_datetime": "05/18/2021 3:30pm"
},
{
"start_datetime": "05/18/2021 1:30pm",
"end_datetime": "05/18/2021 3:30pm"
}
];
let overlapped = false;
for (let i=0; i<timeCollection.length;i++) {
for (let a=0; a<timeCollection.length;a++) {
if (i == a) {
continue;
}
//if the start and end date are both the same with the comparison data.
if (
moment(timeCollection[i].start_datetime, "MM-DD-YYYY hh:mm:A").format("MM-DD-YYYY hh:mm:A") === moment(timeCollection[a].start_datetime, "MM-DD-YYYY hh:mm:A").format("MM-DD-YYYY hh:mm:A") &&
moment(timeCollection[i].end_datetime, "MM-DD-YYYY hh:mm:A").format("MM-DD-YYYY hh:mm:A") === moment(timeCollection[a].end_datetime, "MM-DD-YYYY hh:mm:A").format("MM-DD-YYYY hh:mm:A")
) {
overlapped = true;
} else if (
//checker to check if date and time are in between..
//making sure also that the time belongs to the crew
moment(timeCollection[i].start_datetime, "MM-DD-YYYY hh:mm:A").isBetween(
moment(timeCollection[a].start_datetime, "MM-DD-YYYY hh:mm:A"),
moment(timeCollection[a].end_datetime, "MM-DD-YYYY hh:mm:A")) ||
moment(timeCollection[i].end_datetime, "MM-DD-YYYY hh:mm:A").isBetween(
moment(timeCollection[a].start_datetime, "MM-DD-YYYY hh:mm:A"),
moment(timeCollection[a].end_datetime, "MM-DD-YYYY hh:mm:A"))) {
overlapped = true;
}
}
}
console.log(overlapped);
const timeCollection=[{
“开始日期时间”:“2021年5月18日下午1:30”,
“结束日期时间”:“2021年5月18日下午2:00”
},
{
“开始日期时间”:“2021年5月18日下午2:00”,
“结束日期时间”:“2021年5月18日下午3:30”
},
{
“开始日期时间”:“2021年5月18日下午1:30”,
“结束日期时间”:“2021年5月18日下午3:30”
}
];
让重叠=假;
for(设i=0;它在我这端不起作用。它返回错误的结果。