This commit is contained in:
bobobobo
2026-02-10 22:58:31 +08:00
parent 89b7566aa1
commit 9245fefc9a
8 changed files with 113 additions and 41 deletions

View File

@@ -102,6 +102,49 @@ export const parseDateTime = dateTimeStr => {
}
}
/**
* 计算当前时间距离目标时间的剩余时、分、秒
* @param {string} targetTimeStr - 目标时间字符串,格式如 "2026-02-10 21:50:40"
* @returns {Object} 包含hours、minutes、seconds的对象适配uni-countdown组件
*/
export const calculateRemainingTime = targetTimeStr => {
// 1. 处理目标时间,转换为时间戳(解决时区问题,手动拆分时间字符串)
const [datePart, timePart] = targetTimeStr.split(' ')
const [year, month, day] = datePart.split('-').map(Number)
const [hour, minute, second] = timePart.split(':').map(Number)
// 注意月份是0开始的所以要减1
const targetTime = new Date(
year,
month - 1,
day,
hour,
minute,
second
).getTime()
// 2. 获取当前时间戳
const currentTime = new Date().getTime()
// 3. 计算剩余总秒数如果目标时间已过剩余时间为0
let remainingSeconds = Math.max(
0,
Math.floor((targetTime - currentTime) / 1000)
)
// 4. 转换为时、分、秒
const hours = Math.floor(remainingSeconds / 3600) // 1小时=3600秒
remainingSeconds = remainingSeconds % 3600 // 剩余的秒数
const minutes = Math.floor(remainingSeconds / 60) // 1分钟=60秒
const seconds = remainingSeconds % 60 // 最终剩余的秒数
// 5. 返回适配uni-countdown的格式
return {
hours,
minutes,
seconds
}
}
export const getRemainingTime = endTimeStr => {
const now = new Date().getTime() // 当前时间戳(毫秒)
const end = new Date(endTimeStr.replace(' ', 'T')).getTime() // 转为 ISO 格式并获取时间戳