gpt4 book ai didi

javascript - 累计每小时时间范围内的记录数

转载 作者:行者123 更新时间:2023-11-29 18:54:25 24 4
gpt4 key购买 nike

我会尽我所能解释这一点。

我有一系列独特的日期,格式为 DD/MM/YYYY,如下所示:

const sortDates = [
'14/04/2018',
'12/04/2018',
'10/04/2018',
]

然后我有一个包含以下信息的对象数组。

const bookings = [
{ bookingStart: '2018-04-14 00:30:00' },
{ bookingStart: '2018-04-14 00:42:00' },
{ bookingStart: '2018-04-14 13:35:00' },
{ bookingStart: '2018-04-12 12:30:00' },
];

我想要实现的目标是每天按小时查找和分组数据。示例如下:

const groupedData = [{
date: '2018-04-14',
period : {
startTime: '00:00',
endTime: '00:59',
total: 2, //total bookings found 2018/04/14 00:00 -> 00:59
},
date: '2018-04-14',
period : {
startTime: '01:00',
endTime: '01:59',
total: 0, //total bookings found 2018/04/14 01:00 -> 01:59
},
...etc
}

但是我有点卡住了。我目前的代码如下,不确定返回语句应该如何:

const groupData = sortDates.map((date) => {
for (let i = 0; i <= 23; i += 1) {
const startTime = new Date(date);
const endTime = new Date(date);
startTime.setHours(i);
startTime.setMinutes(0);
startTime.setSeconds(0);
startTime.setMilliseconds(0);
endTime.setHours(i);
endTime.setMinutes(59);
endTime.setSeconds(0);
endTime.setMilliseconds(0);
bookings.map((booking) => {
const dateTime = new Date(booking.bookingStart);
if (startTime.getTime() >= dateTime.getTime()
&& dateTime.getTime() <= endTime.getTime()) {
return {
date: dateTime,
};
}
return null;
});
}
return null;
});

甚至不确定这是否是最好或最快的方法,但我如何以我想要的格式返回?有更快的选择吗?

最佳答案

我会避免完全弄乱日期,而只是比较字符串:

const hmsToHM = hms => hms.match(/^\d\d:\d\d/)[0];
const bookings = [
{ bookingStart: '2018-04-14 00:30:00' },
{ bookingStart: '2018-04-14 00:42:00' },
{ bookingStart: '2018-04-14 00:42:22' },
{ bookingStart: '2018-04-14 00:42:44' },
{ bookingStart: '2018-04-14 13:35:00' },
{ bookingStart: '2018-04-14 00:30:55' },
{ bookingStart: '2018-04-12 12:30:00' },
];
const groupedData = bookings.reduce((groupedData, { bookingStart }) => {
const [date, time] = bookingStart.split(' ');
const startHourMin = hmsToHM(time);

const groupedObj = (() => {
const foundObj = groupedData
.find(({ date: findGroupDate, period: {startTime }}) => {
const findStartHourMin = hmsToHM(startTime);
return findGroupDate === date && findStartHourMin === startHourMin;
});
if (foundObj) return foundObj;
const newObj = { date, period: {
startTime: startHourMin + ':00',
endTime: startHourMin + ':59',
total: 0,
}}
groupedData.push(newObj);
return newObj;
})();

groupedObj.period.total++;
return groupedData;
}, []);
console.log(groupedData);

关于javascript - 累计每小时时间范围内的记录数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49960052/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com