import dayjs, { type Dayjs } from 'dayjs' import weekday from 'dayjs/plugin/weekday' import utc from 'dayjs/plugin/utc' import isToday from 'dayjs/plugin/isToday' import isTomorrow from 'dayjs/plugin/isTomorrow' import isSameOrAfter from 'dayjs/plugin/isSameOrAfter' import isSameOrBefore from 'dayjs/plugin/isSameOrBefore' import customParseFormat from 'dayjs/plugin/customParseFormat' import { DATE_TIME_FORMAT, HALF_DAY } from '#lib/constants/app' dayjs.extend(weekday) dayjs.extend(utc) dayjs.extend(customParseFormat) dayjs.extend(isToday) dayjs.extend(isTomorrow) dayjs.extend(isSameOrAfter) dayjs.extend(isSameOrBefore) export const getWeekday = (date: Dayjs): number => { return date.weekday() } export const formatDate = ( date: Dayjs | string | undefined, format: string = DATE_TIME_FORMAT.DATE_FORMAT, ): string => { if (!date) return '' return typeof date === 'string' ? dayjs(date).format(format) : date.format(format) } export const formatUnitTime = ( date: number | undefined, format: string = DATE_TIME_FORMAT.DATE_FORMAT, ): string => { return date ? dayjs(date * 1000).format(format) : '' } export const toUTCDate = ( date: string, format: string = DATE_TIME_FORMAT.FULL_DATE_FORMAT, ): Dayjs => { return dayjs.utc(date, format).local() } export const checkIsToday = (date: string): boolean => { return dayjs(date).isToday() } export const toDate = (date?: string | Dayjs | Date): Dayjs => { return dayjs(date) } export const checkIsTomorrow = (date: string): boolean => { return dayjs(date).isTomorrow() } export const checkIsInCurrentWeek = (date: string): boolean => { return dayjs(date).isSame(dayjs(), 'week') } export const checkTimeUpcoming = (time: string): boolean => { const nowDate = dayjs().format(DATE_TIME_FORMAT.FULL_DATE_FORMAT_SCHEDULE) return ( dayjs(time).unix() - dayjs(nowDate).unix() > 0 && dayjs(time).unix() - dayjs(nowDate).unix() <= HALF_DAY ) }