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
相关产品推荐
相关产品推荐

