jQuery实现月日格式倒计时 剩余天数计算异常问题求解
问题说明
现有代码存在两处问题导致结果不符合预期:
- 天数计算逻辑错误:直接将总时间差换算为总天数,没有扣除已统计为整月的对应时长,因此显示的是全周期总天数,而非扣除整月后的剩余零散天数
- 选择器笔误:倒计时结束的样式修改逻辑中,
$("demo")缺少id选择器前缀#,无法命中目标DOM元素
修正代码
如果沿用你当前每月固定按30天计算的简化规则,只需调整天数计算逻辑,同时修正选择器笔误即可,修正后代码如下:
var end_date= $('#end_date').val() var start_date= $('#start_date').val() var countDownDate = end_date * 1000; var now = start_date * 1000; // 预定义时间常量,方便维护 const MONTH_MILLISECONDS = 1000 * 60 * 60 * 24 * 30; const DAY_MILLISECONDS = 1000 * 60 * 60 * 24; var x = setInterval(function() { now += 1000; var distance = countDownDate - now; var months = Math.floor(distance / MONTH_MILLISECONDS); // 扣除整月占用的时长后,再计算剩余天数 var remainAfterMonths = distance - months * MONTH_MILLISECONDS; var days = Math.floor(remainAfterMonths / DAY_MILLISECONDS); $("#demo").html(`${months} M ${days} D`); if (distance < 0) { clearInterval(x); // 修正选择器,添加#前缀 $("#demo").css("background-color", "red"); } }, 1000);
提示:固定按30天换算月份是简化实现,和自然月实际天数存在误差。如果需要精确匹配自然月的剩余时长,需要通过Date对象逐月累加计算,不能直接使用固定毫秒值换算。
内容的提问来源于stack exchange,提问作者PinballWizard
相关产品推荐
相关产品推荐

