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

桌面端与移动端Chrome的jQuery倒计时差异问题排查

移动端Safari/Chrome倒计时显示异常的原因与解决办法

我之前也碰到过一模一样的兼容性坑,核心问题出在不同浏览器对非标准日期字符串的解析行为不一致。

你用的2018-06-10 18:00:00这种空格分隔的日期格式,桌面端Chrome能正常识别为本地时间,但iOS上的Safari(包括iOS版Chrome,因为它复用了Safari的WebKit内核)对这种格式的支持很差:要么会把它解析成无效日期,要么会错误地当成UTC时间处理。这就导致countDownDate对应的时间戳和桌面端完全不一样,自然计算出来的倒计时数据就乱了——你说getTime()结果正确,大概率是移动端把日期解析成了UTC时间,和你的本地时区产生了偏移,最终差值计算出错。

给你两个靠谱的修复方案:

方案一:转为ISO 8601标准日期格式

把日期字符串里的空格替换成T,变成符合ISO标准的格式,所有现代浏览器都能正确解析:

$(document).ready(function() {
    $(" .cd").each(function(index, obj) {
        // 替换空格为T,转为标准格式
        var standardDateStr = obj.getAttribute('value').replace(' ', 'T');
        var countDownDate = new Date(standardDateStr);
        var x = setInterval(function() {
            var now = new Date().getTime();
            var distance = countDownDate - now;
            var days = Math.floor(distance / (1000 * 60 * 60 * 24));
            var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
            var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
            var seconds = Math.floor((distance % (1000 * 60)) / 1000);
            obj.innerHTML = days + "d " + hours + "h " + minutes + "m " + seconds + "s ";
            if (distance < 0) {
                clearInterval(x);
                obj.innerHTML = "EXPIRED";
            }
        }, 1000);
    });
});

方案二:手动拆分日期参数(更稳妥)

如果担心还有极端情况的解析问题,可以手动拆分日期字符串,用Date构造函数的多参数形式创建日期对象,完全避免解析差异:

$(document).ready(function() {
    $(" .cd").each(function(index, obj) {
        var dateStr = obj.getAttribute('value');
        // 拆分日期和时间部分
        var [datePart, timePart] = dateStr.split(' ');
        // 拆分年、月、日(注意月份是0起始,要减1)
        var [year, month, day] = datePart.split('-').map(Number);
        // 拆分时、分、秒
        var [hour, minute, second] = timePart.split(':').map(Number);
        // 手动构造日期对象
        var countDownDate = new Date(year, month - 1, day, hour, minute, second);
        
        var x = setInterval(function() {
            var now = new Date().getTime();
            var distance = countDownDate - now;
            var days = Math.floor(distance / (1000 * 60 * 60 * 24));
            var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
            var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
            var seconds = Math.floor((distance % (1000 * 60)) / 1000);
            obj.innerHTML = days + "d " + hours + "h " + minutes + "m " + seconds + "s ";
            if (distance < 0) {
                clearInterval(x);
                obj.innerHTML = "EXPIRED";
            }
        }, 1000);
    });
});

试试这两个方案,应该就能解决移动端的显示问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:12:08