【问题标题】:Javascript Sort by DateJavascript 按日期排序
【发布时间】:2016-08-14 20:37:11
【问题描述】:

我有一个 JavaScritpt 日期排序问题。我有一个最多包含 24 个日期的数组,需要按降序排序。日期格式为完整日期格式。我成功转换为 mm/dd/yyyy。我意识到我不能使用排序,我相信我需要运行排序比较。

我的日期如下所示

eventDatesArrray = ,11/30/2014,12/31/2018,12/31/2013,10/11/2016,10/12/2015

我确实引用了Sort Javascript Object Array By Date。我很抱歉,但我不相信我完全理解它是如何工作的,因为我继续收到一条错误消息,指出我没有传递参数。不确定如何将 a 和 b 传递给此函数。

var sortedEventDates = eventDatesArrray .sort(function(a, b) {
    return a>b ? -1 : a<b ? 1 : 0;
});

提前感谢您的帮助。 艾莉森

【问题讨论】:

  • 这个链接可能对你有帮助:stackoverflow.com/questions/10123953/…
  • 谢谢尼哈尔!我厌倦了你的建议,但不幸的是仍然有点难过。我编辑了我的帖子以反映这一点。

标签: javascript sorting date


【解决方案1】:

如果日期是字符串:

dates = ["10/12/2014", "12/12/2015", "12/31/2015", "14/08/2015"]

dates.sort(function(a, b) {
    var parseDate = function parseDate(dateAsString) {
            var dateParts = dateAsString.split("/");
            return new Date(parseInt(dateParts[2], 10), parseInt(dateParts[1], 10) - 1, parseInt(dateParts[0], 10));
        };

    return parseDate(b) - parseDate(a);
});

[“2015 年 12 月 31 日”、“2015 年 12 月 12 日”、“2015 年 8 月 14 日”、“2014 年 10 月 12 日”]

【讨论】:

  • 你不需要使用 parseIntnew Date(dateParts[2], dateParts[1] - 1, dateParts[0]) 就可以了,因为 Date 构造函数也接受字符串值。您也可以简单地执行以下操作:return parsedDateA - parsedDateB,因为减法运算符将强制日期编号(它们的内部时间值)。 :-) 哦,parsedDateA === parsedDateB 永远不会是真的,因为日期是对象,并且对象永远不会彼此相等(无论是使用 == 还是 ===)。
【解决方案2】:

或者在 ES6 中:

var eventDatesArrray = ["11/30/2014","12/31/2018","12/31/2013","10/11/2016","10/12/2015"];
var dates = eventDatesArrray.map(elem => new Date(elem)).sort((a,b) => a-b);
console.log(dates); //[ Tue Dec 31 2013 00:00:00 GMT+0100 (Paris, Madrid),
                    //  Sun Nov 30 2014 00:00:00 GMT+0100 (Paris, Madrid),
                    //  Mon Oct 12 2015 00:00:00 GMT+0200 (Paris, Madrid (heure d’été)),
                    //  Tue Oct 11 2016 00:00:00 GMT+0200 (Paris, Madrid (heure d’été)),
                    //  Mon Dec 31 2018 00:00:00 GMT+0100 (Paris, Madrid) ]

【讨论】:

  • 不推荐使用 Date 构造函数(或 Date.parse,它们等效于解析)解析字符串,因为它几乎完全依赖于实现。使用库或定制函数手动解析字符串(根据 Adnrzej 的回答)。
【解决方案3】:

您可以将其用作自定义比较器函数:

function compare (a, b) {
    partsA = a.split("/");
    partsB = b.split("/");
    if (partsA[2] > partsB[2]) {
        return -1;
    } else if (partsA[2] < partsB[2]) {
        return 1;
    } else {
        if (partsA[1] > partsB[1]) {
            return -1;
        } else if (partsA[1] < partsB[1]) {
            return 1;
        } else {
            if (partsA[0] > partsB[0]) {
                return -1;
            } else if (partsA[0] < partsB[0]) {
                return 1;
            } else {
                return 0;
            }
        }
    }
}

然后拨打eventDatesArray.sort(compare);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 2021-04-22
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    相关资源
    最近更新 更多