All checks were successful
site-dist-deploy / build-and-deploy (push) Successful in 1m17s
60 lines
1.6 KiB
TypeScript
60 lines
1.6 KiB
TypeScript
/**
|
|
* 订阅对象的接口定义(根据你的后端数据结构调整)
|
|
*/
|
|
interface SubscriptionItem {
|
|
expire_time?: string | number | null
|
|
}
|
|
|
|
export interface ExpireInfo {
|
|
text: string
|
|
highlight: boolean
|
|
}
|
|
|
|
/**
|
|
* 格式化订阅到期信息
|
|
* @param sub 整个订阅对象 item
|
|
*/
|
|
export function formatExpireDate(sub?: SubscriptionItem | null): ExpireInfo {
|
|
// 1. 处理对象不存在的情况
|
|
if (!sub || !sub.expire_time) {
|
|
return { text: '尚未购买套餐', highlight: true }
|
|
}
|
|
|
|
// 2. 解析日期(兼容 ISO 字符串和时间戳)
|
|
const timestamp = sub.expire_time
|
|
const isMs = typeof timestamp === 'number' && timestamp > 10000000000
|
|
const expireDate = new Date(
|
|
isMs ? timestamp : typeof timestamp === 'number' ? timestamp * 1000 : timestamp,
|
|
)
|
|
|
|
if (isNaN(expireDate.getTime())) {
|
|
return { text: '套餐信息无效', highlight: false }
|
|
}
|
|
|
|
// 3. 提取日期组件
|
|
const now = new Date()
|
|
const isExpired = expireDate < now
|
|
|
|
const y = expireDate.getFullYear()
|
|
const m = String(expireDate.getMonth() + 1).padStart(2, '0')
|
|
const d = String(expireDate.getDate()).padStart(2, '0')
|
|
const dateStr = `${y}/${m}/${d}`
|
|
|
|
// 4. 根据是否过期返回不同格式
|
|
if (isExpired) {
|
|
return {
|
|
text: `已于 ${dateStr} 到期`,
|
|
highlight: true,
|
|
}
|
|
}
|
|
|
|
const hh = String(expireDate.getHours()).padStart(2, '0')
|
|
const mm = String(expireDate.getMinutes()).padStart(2, '0')
|
|
// const ss = String(expireDate.getSeconds()).padStart(2, '0')
|
|
|
|
return {
|
|
text: `到期时间:${dateStr} ${hh}:${mm}`,
|
|
highlight: false,
|
|
}
|
|
}
|