簡體   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