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 { 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; }