import dayjs from "dayjs" /** * 计算剩余时间差(毫秒) * @param {Object} item - 包含groupEndTime的订单/拼团对象 * @returns {number} 剩余时间(毫秒) */ function returnRemainingTime(item) { if (!item?.groupEndTime) return 0; // 容错:无结束时间则返回0 return dayjs(item.groupEndTime).valueOf() - dayjs().valueOf(); } /** * 将毫秒差格式化为 HH:MM:SS(最多72小时) * @param {number} ms - 时间差(毫秒) * @returns {string} 格式化后的时分秒(如 09:09:09、72:00:00、00:00:00) */ function formatTimeToHMS(ms) { // 边界1:已过期/无剩余时间 → 显示00:00:00 if (ms <= 0) return '00:00:00'; // 边界2:超过72小时 → 按72小时算(72*60*60*1000 = 259200000毫秒) const maxMs = 72 * 60 * 60 * 1000; const validMs = Math.min(ms, maxMs); // 转换为总秒数(取整,避免小数) const totalSeconds = Math.floor(validMs / 1000); // 拆解小时、分钟、秒 const hours = Math.floor(totalSeconds / 3600); const remainingSeconds = totalSeconds % 3600; const minutes = Math.floor(remainingSeconds / 60); const seconds = remainingSeconds % 60; // 补零(确保两位数,如 9 → 09) const pad = (num) => String(num).padStart(2, '0'); return `${pad(hours)}:${pad(minutes)}:${pad(seconds)}`; } let timer = null let nowTime = ref(Date.now()) timer = setInterval(() => { nowTime.value = Date.now() }, 1000) // 组合使用:获取格式化后的剩余时间 export function getRemainingHMS(item) { const ms = returnRemainingTime(item); return formatTimeToHMS(ms); }