JavaScript解析MySQL timestamp计算剩余时间输出-1天问题求解
问题修复说明
核心错误点
- 缺少
new关键字实例化Date对象:直接调用Date()函数返回的是当前时间的字符串,而非传入时间对应的日期对象,导致传入update函数的时间参数错误。 - 日期格式不规范:使用
06-08-21 16:06:37这类非标准日期格式,不同浏览器的解析逻辑存在差异,容易出现日期解析错误。 - 超时判断逻辑错误:仅在计算完所有时间单位后判断
seconds < 0,此时若目标时间早于当前时间,days已经被计算为负数,无法被修正。
修复后代码
function update(datetime = "2021-07-15 20:24:42") { const timeleft = new Date(datetime); const now = new Date(); let secs = (timeleft - now) / 1000; // 先判断是否已经超时,直接返回全零 if (secs <= 0) { return '0 days, 0 hours, 0 minutes, 0 seconds'; } const days = Math.floor(secs / (3600 * 24)); secs -= days * 3600 * 24; const hours = Math.floor(secs / 3600); secs -= hours * 3600; const minutes = Math.floor(secs / 60); const seconds = Math.floor(secs % 60); return days+' days, '+ hours+' hours, '+minutes+' minutes, '+seconds+' seconds'; } // 时间用标准YYYY-MM-DD格式,加new关键字实例化Date对象 const member = new Date("2021-06-08 16:06:37"); alert("Left: "+update(member));
内容的提问来源于stack exchange,提问作者TheDude42
相关产品推荐
相关产品推荐

