MaxKB/ui/src/utils/time.ts
wxg0103 368c175f62
Some checks are pending
sync2gitee / repo-sync (push) Waiting to run
feat: implement fromNowDate function for time difference calculation
2025-07-13 15:30:11 +08:00

84 lines
2.3 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import moment from 'moment'
import 'moment/dist/locale/zh-cn'
moment.locale('zh-cn')
import {t} from '@/locales'
// 当天日期 YYYY-MM-DD
export const nowDate = moment().format('YYYY-MM-DD')
// 当前时间的前n天
export function beforeDay(n: number | string) {
return moment().subtract(n, 'days').format('YYYY-MM-DD')
}
const getCheckDate = (timestamp: any) => {
if (!timestamp) return false
const dt = new Date(timestamp)
if (isNaN(dt.getTime())) return false
return dt
}
export const datetimeFormat = (timestamp: any) => {
const dt = getCheckDate(timestamp)
if (!dt) return timestamp
const y = dt.getFullYear()
const m = (dt.getMonth() + 1 + '').padStart(2, '0')
const d = (dt.getDate() + '').padStart(2, '0')
const hh = (dt.getHours() + '').padStart(2, '0')
const mm = (dt.getMinutes() + '').padStart(2, '0')
const ss = (dt.getSeconds() + '').padStart(2, '0')
return `${y}-${m}-${d} ${hh}:${mm}:${ss}`
}
export const dateFormat = (timestamp: any) => {
const dt = getCheckDate(timestamp)
if (!dt) return timestamp
const y = dt.getFullYear()
const m = (dt.getMonth() + 1 + '').padStart(2, '0')
const d = (dt.getDate() + '').padStart(2, '0')
return `${y}-${m}-${d}`
}
export function fromNowDate(time: any) {
// 拿到当前时间戳和发布时的时间戳,然后得出时间戳差
const curTime = new Date()
const futureTime = new Date(time)
const timeDiff = futureTime.getTime() - curTime.getTime()
// 单位换算
const min = 60 * 1000
const hour = min * 60
const day = hour * 24
const week = day * 7
// 计算发布时间距离当前时间的周、天、时、分
const exceedWeek = Math.floor(timeDiff / week)
const exceedDay = Math.floor(timeDiff / day)
const exceedHour = Math.floor(timeDiff / hour)
const exceedMin = Math.floor(timeDiff / min)
// 最后判断时间差到底是属于哪个区间然后return
if (exceedWeek > 0) {
return ''
} else {
if (exceedDay < 7 && exceedDay > 0) {
return exceedDay + t('layout.time.daysLater')
} else {
if (exceedHour < 24 && exceedHour > 0) {
return exceedHour + t('layout.time.hoursLater')
} else {
if (exceedMin < 0) {
return t('layout.time.expired')
} else {
return t('layout.time.expiringSoon')
}
}
}
}
}