簡體   English   中英

javascript如何按日期排序

[英]javascript how to sort by date

為了按日期對數組進行排序,使用以下方法:

function sortDate(sortValues)
{
  sortValues.sort(function (a,b)
  {
    a=new Date(a.date);
    b=new Date(b.date);
    if (a<b)
    {
      return -1;
    }
    if (a>b)
    {
      return 1;
    }
    return 0; 
  })
  return sortValues;
}

這種方法奇怪地起作用:

在第一種情況下,方法可以正常工作(返回按日期排序的數組),但是在另一個jsp頁面上,該方法不起作用(返回接收的同一數組。日期格式相同)。 最奇怪的是在用法輸出期間("alert(a+" "+b);") vars“ a”,“ b”的值等於“ Invalid Date” 但這事實在第一種情況下不受影響。

首先確保a.date和b.date是有效的日期字符串,可以創建Date對象。 請參考此以查明它們是否為有效的日期字符串: 鏈接

然后試試這個。

function sortDate(sortValues)
{
    sortValues.sort(function(a,b){
        var date_a=new Date(a.date).getTime();
        var date_b=new Date(b.date).getTime();
        return date_a > date_b;
    }
    return sortValues;
};

您可以使用Date.parse從字符串獲取時間戳。

通過在排序之前使用isFinite測試,可以過濾掉無效的日期輸入:

function sortDates(arr){
    return arr.map(Date.parse).filter(isFinite).sort(function(a, b){
        return a-b
    });
}

//測試:

var A1 =

['9/8/2007,4:51:00 PM','11 / 8/2001,1:43:00 PM','5/6/2031,9:12:00 AM','10 / 27 / 2013,2:12:00 AM','10 / 18/2004,1:06:00 PM','8/20/2000,4:18:00 AM','8/17/2015,5: 55:00 PM”,“ 10/30 / 2000、3:44:00 PM”,“ 12/8 / 2002、1:45:00 PM”,“ 1/21 / 2000、11:11:00 AM” ,“ 6/10 / 2000、3:52:00 PM”,“ 12/17 / 2012、12:29:00 AM”,“ 1/11 / 2000、12:54:00 PM”,“ 1/27” / 2007,11:14:00 PM','4/30/2000,8:07:00 PM','7/26/2019,10:15:00 PM','2/10/2000,8: 25:00 AM','1/26 / 2009、12:13:00 PM','4/29 / 2005、10:38:00 PM','1/24 / 2030、3:51:00AM' ,'1/31/2000,1:43:00 PM','10 / 8/2009,1:33:00 AM','8/4/2020,11:31:00 AM','4/27 / 2026,10:10:00 PM','2/13/2025,6:05:00 PM','7/29/2002,3:04:00 PM','7/18/2010,3: 17:00 AM'',``2/5 / 2012、7:09:00 PM'',``5/20 / 2003、5:44:00 PM'',``9/15 / 2021、1:32:00 AM'' ,'4/21 / 2001、11:14:00 AM','11/7 / 2005、9:18:00 AM','7/16 / 2018、9:21:00 AM','10/13 / 2028,7:29:00 AM','7/6/2017,1:39:00 PM','7/26/2016,6:19:00 AM','5/18/2008,12: 45:00 PM','3/21/2002,7:05:00 AM','3/22/2000,3:51:00 PM','9/6/2014,1: 34:00 AM','bob','4/8 / 2004、1:56:00 PM','12/5 / 2023、6:58:00 AM','1/9 / 2001、9:36 :00 PM','10 / 28/2003,7:50:00 PM','10 / 26/2022,2:06:00 PM','7/5/2027,8:57:00 AM', '7/30/2001,5:04:00 PM','6/19/2006,4:24:00 PM','4/27/2011,12:12:00 PM','1/1 / 2000,6:41:00 PM'];

var A2 = sortDates(A1);

/ *返回值:(數組)

946770060000,947613240000,948471060000,949344180000,950189100000,953754660000,957139620000,960666720000,966759480000,972935040000,979094160000,987866040000,996527040000,1005244980000,1016708700000,1027969440000,1039373100000,10534670400000000、109637385、1096376000 1189284660000,1211129100000,1232989980000,1254979980000,1279437420000,1303920720000,1328486940000,1355722140000,1382854320000,1409981640000,1439848500000,1469528340000,1499362740000,1531747260000,1564193700000,1596555060000,1631683920000,1666807560000,1701777480000,1739487900000,1777342200000,1814792220000,1855049340000,1895475060000,1935839520000 * /

然后,您可以根據需要將時間戳轉換回日期或字符串。

A2.map(function(itm){   
    return new Date(itm).toLocaleString();
}).join(', ');

/ *返回值:(字符串)

1/1 / 2000、6:41:00 PM,1/11 / 2000、12:54:00 PM,1/21 / 2000、11:11:00 AM,1/31 / 2000、1:43:00 PM,2/10/2000,8:25:00 AM,3/22/2000,2:51:00 PM,4/30/2000,8:07:00 PM,6/10/2000,3:52 :00 PM,8/20/2000,4:18:00 AM,10/30/2000,2:44:00 PM,1/9/2001,9:36:00 PM,4/21/2001,11 :14:00 AM,2001/7/30,5:04:00 PM,11/8/2001,1:43:00 PM,3/21/2002,6:05:00 AM,7/29/2002 ,3:04:00 PM,12/8/2002,1:45:00 PM,5/20/2003,5:44:00 PM,10/28/2003,6:50:00 PM,4/8 / 2004,1:56:00 PM,10/18/2004,1:06:00 PM,4/29/2005,10:38:00 PM,11/7/2005,9:18:00 AM,6 / 19/2006,4:24:00 PM,2007/1/27,11:14:00 PM,9/8/2007,4:51:00 PM,5/18/2008,12:45:00 PM ,2009年6月6日,12:13:00 PM,2009年10月8日,1:33:00 AM,2010年7月18日,3:17:00 AM,2011年4月27日,12:12: 00 PM,2/5/2012,7:09:00 PM,12/17/2012,12:29:00 AM,10/27/2013,2:12:00 AM,9/6/2014,1: 34:00 AM,8/17/2015,5:55:00 PM,7/26/2016,6:19:00 AM,7/6/2017,1:39:00 PM,7/16/2018, 9:21:00 AM,7/26/2019,10:15:00 PM,8/4/2020,11:31:00 AM,9/15/2021,1:32:00 AM,10/26 / 2022,2:06:00 PM,12 / 5/2023,6:58:00 AM,2/13/2025,6:05:00 PM,4/27/2026,10:10:00 PM,7/5/2027,8:57:00 AM ,10/13 / 2028、7:29:00 AM,1/24 / 2030、3:51:00 AM,5/6 / 2031、9:12:00 AM * /

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM