2024-10-01 01:22:25 +08:00

59 lines
1.4 KiB
TypeScript

import dayjs from 'dayjs';
import type { ThingType } from './type';
import isoWeek from 'dayjs/plugin/isoWeek';
import weekday from 'dayjs/plugin/weekday';
export function getWeekDates(date: string | number | Date | dayjs.Dayjs | null | undefined) {
dayjs.extend(isoWeek);
dayjs.extend(weekday);
const startOfWeek = dayjs(date).weekday(0);
const _weekDates: { date: number; day: string; weekDay: string }[] = [];
for (let i = 0; i < 7; i += 1) {
_weekDates.push({
date: startOfWeek.add(i, 'day').startOf('day').valueOf(),
day: startOfWeek.add(i, 'day').format('D'),
weekDay: startOfWeek.add(i, 'day').format('周dd')
});
}
return _weekDates;
}
export function groupEventsByDay({
events,
minuteStep
}: {
events: ThingType[];
minuteStep: number;
}): Map<number, ThingType[]> {
const _groupedEvents = new Map();
events.forEach(event => {
const { startTime, endTime } = event;
const startOfDay = dayjs(startTime).startOf('day').valueOf();
const startDayTime = dayjs(startTime);
const toTop = startDayTime.diff(startDayTime.startOf('day'), 'minute');
const duration = dayjs(endTime).diff(startTime, 'minute');
if (!_groupedEvents.has(startOfDay)) {
_groupedEvents.set(startOfDay, []);
}
_groupedEvents.get(startOfDay).push({
...event,
toTop: toTop * minuteStep,
height: duration * minuteStep
});
});
return _groupedEvents;
}