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

iOS设备日期比较异常:iPhone端日期判断弹窗错误

解决iPhone上日期比较功能的错误问题

嘿,我一眼就看出问题所在了——iPhone上的Safari浏览器对日期字符串的解析规则比其他浏览器严格很多!你代码里用的yyyy-mm-dd hh:mm:ss这种空格分隔的格式,在iOS的Safari里会被解析成无效日期,导致getTime()返回NaN,自然就会触发错误的提示逻辑了。

两种靠谱的修复方案

我给你准备了两种修复方式,都能完美解决兼容性问题:

方案一:转成ISO 8601标准格式

把日期字符串里的空格替换成T,变成yyyy-mm-ddThh:mm:ss这种所有浏览器都支持的ISO标准格式:

function play_time() {
    var today = new Date();
    // 用padStart简化补零逻辑,替代原来的if判断
    const year = today.getFullYear();
    const month = String(today.getMonth() + 1).padStart(2, '0');
    const day = String(today.getDate()).padStart(2, '0');
    const hours = String(today.getHours()).padStart(2, '0');
    const minutes = String(today.getMinutes()).padStart(2, '0');
    const seconds = String(today.getSeconds()).padStart(2, '0');
    
    // 构造ISO格式的当前日期时间
    const crntDatetime = `${year}-${month}-${day}T${hours}:${minutes}:${seconds}`;
    const crntTime = new Date(crntDatetime).getTime();
    
    // 把目标时间的空格替换成T
    const check = '2020-08-18 23:14:07'.replace(' ', 'T');
    const gameTime = new Date(check).getTime();
    
    if (crntTime <= gameTime) {
        alert('Play');
    } else {
        alert('Later');
    }
}
<button onClick="play_time();"> show Time </button>

方案二:直接用Date构造参数创建对象(更推荐)

完全避开字符串解析的坑,直接用年、月、日、时、分、秒作为参数构造Date对象(注意:Date的月份参数是0-11,所以8月要传7):

function play_time() {
    const today = new Date();
    const crntTime = today.getTime();
    
    // 直接传入年、月(减1)、日、时、分、秒
    const gameTime = new Date(2020, 7, 18, 23, 14, 7).getTime();
    
    if (crntTime <= gameTime) {
        alert('Play');
    } else {
        alert('Later');
    }
}
<button onClick="play_time();"> show Time </button>

小提示

String().padStart(2, '0')是ES6+的方法,能帮你快速给单个数字的日期/时间补零,比原来的if判断简洁多啦。如果需要兼容极旧的浏览器,也可以保留原来的if补零逻辑~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 20:27:46