You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS计算HTML自定义日期发布天数时循环返回相同结果问题求助

核心BUG原因
  • 日期转数值逻辑完全错误:你将日期格式化为日-月-年格式的字符串后调用parseInt转换,解析时遇到连接符-会直接截断,仅会保留第一个数字(例如日期2-11-2021解析后仅得到数字2)。且parseInt(oldDateOrder) / msPerDay的计算结果极小,对最终整数结果无影响,所有返回值基本等同于parseInt(now)的数值,所以所有日期计算结果完全一致。
  • 运算优先级错误:现有代码未给时间差部分加括号,会先执行除法再执行减法,计算逻辑不符合预期。
  • 未使用正确的时间戳计算:日期间隔计算应直接使用Date对象的毫秒时间戳相减,无需转换为自定义字符串格式处理。
修正后的完整代码

JS代码(已补充回写逻辑)

// 获取当前时间的毫秒时间戳
const todayTime = new Date().getTime()
// 定义一天对应的毫秒数
const msPerDay = 24 * 60 * 60 * 1000
// 获取所有存放发布日期的节点
const oldDateList = document.querySelectorAll(".olddate")

for (let i = 0; i < oldDateList.length; i++) {
    // 直接解析HTML中的日期为Date对象,再获取毫秒时间戳
    const oldTime = new Date(oldDateList[i].innerHTML).getTime()
    // 计算间隔天数,加绝对值避免出现负数
    const daysAgo = Math.floor(Math.abs(todayTime - oldTime) / msPerDay)
    // 回写结果到标签,可根据需求调整展示格式,此处为追加在原日期后
    oldDateList[i].innerHTML = `${oldDateList[i].innerHTML}(${daysAgo}天前)`
}

注意事项

HTML中使用的月/日/年格式的日期可以被Date对象正常解析,如果你后续修改为日/月/年的格式,需要额外做格式转换再传入Date构造函数,避免解析错误。

内容的提问来源于stack exchange,提问作者Color

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 17:27:05