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

iOS端网页倒计时显示NaN问题求助及代码排查

iOS设备上JavaScript倒计时显示NaN的解决方案

问题根源

你的代码在iOS上显示NaN,核心原因是iOS Safari对日期字符串的解析遵循更严格的标准。很多在Android、Windows浏览器中能正常解析的非标准日期格式(比如"2024-05-20 14:30:00"这种用空格分隔日期和时间的格式),在iOS上会被判定为无效日期,调用getTime()后返回NaN,后续的差值计算、天数计算自然全部变成NaN。

解决方案

1. 统一日期格式为ISO 8601标准

将serverTime转换为iOS能正确识别的ISO 8601格式,比如把空格替换为T:

const formattedServerTime = serverTime.replace(' ', 'T');

如果是UTC时间,记得加上Z后缀(比如"2024-05-20T14:30:00Z")。

2. 增加日期有效性校验

在初始化倒计时前,先判断日期是否解析成功,避免无效值进入计算:

const targetDate = new Date(formattedServerTime);
if (isNaN(targetDate.getTime())) {
    // 解析失败时直接显示默认值
    document.querySelector(".days").innerHTML = "00";
    return;
}

3. 优化倒计时计算逻辑

确保差值为负数(目标时间已过)时,直接显示00,避免异常计算:

修正后的完整代码

// 适配iOS的日期格式转换
const formattedServerTime = serverTime.replace(' ', 'T');
const targetDate = new Date(formattedServerTime);

// 校验日期有效性
if (isNaN(targetDate.getTime())) {
    document.querySelector(".days").innerHTML = "00";
} else {
    const newDate = targetDate.getTime();
    const countdown = setInterval(() => {
        const date = new Date().getTime();
        const diff = newDate - date;

        let days = 0;
        // 仅当目标时间未过时计算天数
        if (diff > 0) {
            days = Math.floor(
                (diff % (1000 * 60 * 60 * 24 * (365.25 / 12))) / (1000 * 60 * 60 * 24)
            );
        }
        document.querySelector(".days").innerHTML = days < 10 ? "0" + days : days;

        // 倒计时结束后清除定时器
        if (date >= newDate) {
            clearInterval(countdown);
            document.querySelector(".days").innerHTML = "00";
        }
    }, 1000);
}

内容的提问来源于stack exchange,提问作者Christopher Nathanael Tessy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 19:18:18