import dayjs from 'dayjs' import relativeTime from 'dayjs/plugin/relativeTime' import 'dayjs/locale/zh-cn' dayjs.locale('zh-cn') // 设置为中文 // 使用相对时间插件 dayjs.extend(relativeTime) export function RelativeTime(time: number) { return dayjs(time * 1000).fromNow() } export function showDay(time: number) { return dayjs(time).format('YYYY-MM-DD') } export function getDay(num?: number) { if (num) { const yesterday = dayjs().subtract(num, 'day') console.log(yesterday.format('YYYY-MM-DD')) return yesterday.format('YYYY-MM-DD') } return dayjs().format('YYYY-MM-DD') } export function getOverDay(num: number, type: string) { const currentDate = dayjs() const formattedCurrentDate = currentDate.format('YYYY-MM-DD') console.log('当前日期:', formattedCurrentDate) if (type === 'day') { //获取过去num天的日期 const pastFifteenDays = dayjs().subtract(num, 'day') const formattedPastFifteenDays = pastFifteenDays.format('YYYY-MM-DD') return [formattedPastFifteenDays, formattedCurrentDate] } if (type === 'month') { // 获取过去num个月的日期 const pastTwelveMonths = dayjs().subtract(num, 'month') const formattedPastTwelveMonths = pastTwelveMonths.format('YYYY-MM-DD') return [formattedPastTwelveMonths, formattedCurrentDate] } } export function getTheFutureDay(num = 1) { //获取未来num天的日期 const pastFifteenDays = dayjs().add(num, 'day') return pastFifteenDays.format('YYYY-MM-DD') } export function getThreeMonthsLater(num = 3, dateString: string) { const date = dayjs(dateString) const threeMonthsLater = date.add(num || 3, 'month') return threeMonthsLater.format('YYYY-MM-DD') } export function getCurrentHour() { const now = new Date() const currentHour = now.getHours() const currentMinute = now.getMinutes() console.log(currentHour, currentMinute, 'dayjs().hour()') return { currentHour, currentMinute } // return dayjs().hour() } export function generateTimeSlots(externalDate = null) { // 如果没有外部传入日期,使用当前日期 const baseDate = externalDate ? dayjs(externalDate) : dayjs() const now = externalDate ? dayjs(externalDate) : dayjs() // 使用相同的日期作为当前时间 const startHour = 8 // 开始时间 8:00 const endHour = 18 // 结束时间 18:00 const interval = 2 // 间隔2小时 const currentTime = now.valueOf() // 当前时间的时间戳 const slots = [] let currentStart = startHour // 生成所有时间段 while (currentStart < endHour) { const currentEnd = Math.min(currentStart + interval, endHour) // 使用基准日期设置具体时间 const startTime = baseDate.hour(currentStart).minute(0).second(0) const endTime = baseDate.hour(currentEnd).minute(0).second(0) const startStr = startTime.format('HH:mm') const endStr = endTime.format('HH:mm') // 检查当前时间是否在这个时间段内 const isCurrentPeriod = currentTime >= startTime.valueOf() && currentTime < endTime.valueOf() // 只有当时间段还未结束时才显示 if (endTime.valueOf() > currentTime) { slots.push({ label: isCurrentPeriod ? '两个小时内' : `${startStr}-${endStr}`, str: startStr, end: endStr, isCurrent: isCurrentPeriod, date: baseDate.format('YYYY-MM-DD'), startTimestamp: startTime.valueOf(), endTimestamp: endTime.valueOf() }) } currentStart = currentEnd } console.log('slots', slots) return slots } export function isSameDay(day: string) { //是否是当天-还款日期 const date1 = new Date(day) const date2 = new Date() return ( date1.getFullYear() === date2.getFullYear() && date1.getMonth() === date2.getMonth() && date1.getDate() === date2.getDate() ) } export function getTimeRangeDisplay(startTime: string, endTime: string, currentTime = null) { try { const start = dayjs(startTime) const end = dayjs(endTime) const now = currentTime ? dayjs(currentTime) : dayjs() if (!start.isValid() || !end.isValid()) { return '' } if (start.isAfter(end)) { return '时间顺序错误' } // 检查当前时间是否在时间段内 if (now.isAfter(start) && now.isBefore(end)) { return '两个小时内' } // 不在时间段内,显示具体时间 const isSameDay = start.isSame(end, 'day') if (isSameDay) { return `${start.format('YYYY-MM-DD')} ${start.format('HH:mm')}-${end.format('HH:mm')}` } else { return `${start.format('YYYY-MM-DD HH:mm')} - ${end.format('YYYY-MM-DD HH:mm')}` } } catch (error) { return '时间格式错误' } } export function currentYear() { //获取当前年份 const currentYear = new Date().getFullYear() console.log('当前年份:', currentYear) return currentYear + '' } export function getFromNow(time: string) { //获取时间距离现在的时间 return time ? dayjs(time).fromNow() : '' // 22 年前 } export function getIsInRangeInclusive(start?: string, end?: string) { const now = dayjs() // 创建日期段的起始和结束时间的dayjs对象 const startDate = dayjs(start) const endDate = dayjs(end) return now.isAfter(startDate) && now.isBefore(endDate) } export function getDate(time: string) { //时间转换为YYYY-MM-DD格式 return time ? dayjs(time).format('YYYY-MM-DD') : '' } export function specificTime(targetTime: string) { const now = dayjs() const target = dayjs(targetTime) let hoursDiff = Math.abs(target.diff(now, 'hour', true)) <= 2 || target.isBefore(now) console.log(hoursDiff, 'hoursDiff') //是否在2小时内的 return hoursDiff } export function showCurrentTime() { const timeString = dayjs().format('HH:mm:ss') return timeString } export function checkWorkStatus() { const now = dayjs() const currentHour = now.hour() // 上班时间: 8点-18点 if (currentHour >= 8 && currentHour < 18) { return { status: '在线', value: 'Online' } } else { return { status: '已休息', value: 'Offline' } } }