首页 文章

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

提问于
浏览
0

在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函数来分隔3个数字,然后将它们存储在一个数组中 . 然后将日期a分配给具有3个数字的数组,日期b . 然后我检查两个数组中的值是否相等,如果是,返回0(什么都不做) . 如果数组a中的年份大于数组b中的年份,则将其在输出数组中向下移动1个空格 . 如果年份相等,则检查月份 . 如果月份大于b中的月份,则在输出数组中向下移动1个空格 . 等等 .

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

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

为什么我的功能不起作用以及如何使其工作?

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

3 回答

  • 0

    请使用javascript的日期对象并执行以下操作进行排序:

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

    看起来日期格式总是与你已经拆分等相同,你应该做的是使用日期对象并比较它们

    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;
    });
    
  • 0

    首先,让我们先解决一些问题 .

    • Javascript Date 对象存储为自数据以来的毫秒数,当您将它们输出到字符串时,它们可能具有毫秒,时区信息等,但这与它们的内部无关 .

    • 你的排序函数是一种过于复杂的方式 a.date - b.date

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

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

相关问题