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

JavaScript sort方法在iOS及Safari浏览器中无法正常工作的问题

日期排序在Safari/iOS失效的解决办法

问题根源

Safari(包括iOS端)对Date构造函数的日期字符串解析规则远不如Chrome宽松。如果你的data-date属性用了非标准格式(比如DD/MM/YYYY),Chrome能自动识别解析,但Safari会返回Invalid Date,调用getTime()得到NaN,直接导致排序逻辑完全失效。

修复方案

1. 统一日期解析逻辑

先把非标准格式的日期字符串转换为所有浏览器都支持的ISO 8601格式(YYYY-MM-DD),再进行日期对象的创建。

2. 调整后的完整代码

function sortDates(b, a) {
    // 自定义日期解析函数,适配你的data-date格式
    function parseDate(dateStr) {
        // 示例:处理DD/MM/YYYY格式,转为YYYY-MM-DD
        if (dateStr.includes('/')) {
            const [day, month, year] = dateStr.split('/');
            return new Date(`${year}-${month}-${day}`);
        }
        // 标准格式直接返回Date对象
        return new Date(dateStr);
    }

    const dateB = parseDate(b);
    const dateA = parseDate(a);
    
    // 处理解析失败的异常情况,避免NaN干扰排序
    if (isNaN(dateB.getTime()) || isNaN(dateA.getTime())) {
        return 0; // 解析失败的日期默认保持原顺序,可按需调整
    }
    
    return dateB.getTime() - dateA.getTime();
}

var dates = [];
var _old;

$('.sort').each(function(){
    _old = $(this).parent();
    dates.push($(this).data('date'));
});

var sorted = dates.sort(sortDates);
var _new = $('<div class="row" id="sort">').insertBefore(_old);

$.each(sorted,function(i,val){
    $('.sort[data-date="' + val + '"]').appendTo(_new);
});

_old.remove();

关键注意点

  • 如果你data-date的格式是MM/DD/YYYY,只需修改parseDate里的拆分顺序为[month, day, year]即可。
  • 新增的isNaN检查能避免因个别日期格式错误导致整个排序崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 10:15:38