繁体   English   中英

如何在JavaScript中对日期字符串进行排序(格式示例:2014 7 23)?

[英]How to sort date strings (format example: 2014 7 23) in JavaScript?

在JavaScript中,我试图按日期对一组对象进行排序,每个对象都有一个日期,但遇到了障碍。 另外,日期是从网站上的3个下拉框中输入的,所以我只需要3个数字。 这意味着我不能使用JavaScript的Date()对象,因为它还会添加时间,时区并以字母等形式写月份名称。

示例:我将5个对象添加到数组中。 我尝试使用JavaScript排序功能,具体来说就是:

array.sort(function(a, b) {
    if(a.date == b.date){
        return 0;
    }
    else if (a.date < b.date){
        return 1;
    } 
     else {
        return -1;
    }
})

但是,这仅按年份排序。

所以如果我加上:2014 7 12 2017 8 16 2017 4 14 2017 1 31 2017 2 26

我得到:2014 7 12 2017 2 26 2017 8 16 2017 1 31 2017 4 14

这是我用来制作不同Label对象的构造函数。

function Label(name, date, type) {
this.name = name;
this.date = date;
this.type = type;

}

var a = new Label("name1", "2016 5 16", 5);
var b = new Label("name2", "2016 7 20", 3);
var c = new Label("name3", "2016 3 15", 2);

我的日期属性只是一个字符串中的3个数字。 所以我尝试将sort函数重写为:

    array.sort(function(a,b){
        a = a.date.split(" ");
        b = b.date.split(" ");
        if(a[0] === b[0] && a[1] === b[1] && a[2] === a[2]){
            return 0;
        }
        else if ((a[0] > b[0]) || (a[0] === b[0] && a[1] > b[1]) || (a[0] === b[0] && a[1] === b[1] && a[2] > b[2])){
            return -1;
        } 
        else {
            return 1;
        }
    });

即我试图使用.split函数分隔三个数字,然后将其存储在数组中。 然后为日期a分配3个数字的数组,日期b也是如此。 然后,我检查两个数组中的值是否相等,如果相等,则返回0(不执行任何操作)。 如果数组a中的年份大于数组b中的年份,请将其在输出数组中下移1个空格。 如果年份相等,则检查月份。 如果a中的月份大于b中的月份,请在输出数组中向下移动1个空格。 等等。

但是,这不会发生。 它基本上给了我相同的输出,只按年份排序,却忽略了月份和日期。

我已经检查了几个类似的StackOverflow问题,但是大多数问题都使用Date()对象。 我特别需要格式“数字数字”。

为什么我的功能不起作用?如何使它起作用?

编辑:通过日期和构造函数的示例使我的帖子更加清晰。

请使用javascript的date对象,并执行以下排序:

array.sort(function(a, b) {
    return a.date.getTime()-b.date.getTime();
});

首先,让我们整理一些东西。

  • Javascript Date对象存储为自基准以来的毫秒数,当您将它们输出到字符串中时,它们很可能具有毫秒数,时区信息等,但这与它们的内部无关。
  • 您的排序功能是执行a.date - b.date一种过于复杂的方式

因此,您要做的就是将属性作为实际的Date对象,并使用sort函数

var sortedArray = array.sort(function(a, b) {
  a.date - b.date;
});

看起来日期格式始终与您已经分割的日期相同,因此您应该使用日期对象并进行比较

array.sort(function(a,b){
    var arr1 = a.date.split(" ");
    var arr2 = b.date.split(" ");

    var time1 = new Date(arr1[0], arr1[1]-1, arr1[2]); // year, month, day
    var time2 = new Date(arr2[0], arr2[1]-1, arr2[2]);

    return time1 - time2;
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM