forked from wangziqi/gongxue-base
42 lines
1.3 KiB
TypeScript
42 lines
1.3 KiB
TypeScript
import dayjs from '../common/dayjs';
|
|
|
|
export function toMinutes(time: string): number {
|
|
const [hour, minute] = time.split(':').map(Number);
|
|
return hour * 60 + minute;
|
|
}
|
|
|
|
export function getCourseClock(date: Date): { date: string; minutes: number } {
|
|
const d = dayjs(date);
|
|
return {
|
|
date: d.format('YYYY-MM-DD'),
|
|
minutes: d.hour() * 60 + d.minute(),
|
|
};
|
|
}
|
|
|
|
export function shiftDate(date: string, days: number): string {
|
|
return dayjs.utc(`${date}T00:00:00.000Z`).add(days, 'day').format('YYYY-MM-DD');
|
|
}
|
|
|
|
export function mapLessonScheduleTimeToSession(startTime: string): string {
|
|
const hour = parseInt(startTime.slice(0, 2), 10);
|
|
if (hour < 8) return 'morning_reading';
|
|
if (hour < 12) return 'morning';
|
|
if (hour < 17) return 'afternoon';
|
|
if (hour < 20) return 'evening_study';
|
|
return 'night_check';
|
|
}
|
|
|
|
export function isClassStudentActiveOnDate(
|
|
classStudent: Pick<
|
|
import('../entities/class-student.entity').ClassStudent,
|
|
'joinDate' | 'leaveDate' | 'status'
|
|
>,
|
|
lessonDate: string,
|
|
): boolean {
|
|
const status = classStudent.status ?? 'active';
|
|
if (!['active', 'left'].includes(status)) return false;
|
|
if (classStudent.joinDate && classStudent.joinDate > lessonDate) return false;
|
|
if (classStudent.leaveDate && classStudent.leaveDate < lessonDate) return false;
|
|
return true;
|
|
}
|