javascript如何按日期排序

时间:2014-05-16 13:10:49

标签: javascript sorting datetime

按日期排序数组按以下方法使用:

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);")值的变量&#34; a&#34;,&#34; b&#34;等于&#34;无效日期&#34; 。但是这个事实在第一种情况下并没有影响。

2 个答案:

答案 0 :(得分:0)

首先确保a.date和b.date是有效的日期字符串,可以创建Date对象。请参阅此处以了解它们是否为有效的日期字符串:link

然后试一试。

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;
};

答案 1 :(得分:0)

您可以使用Date.parse从字符串中获取时间戳。

通过在排序前使用isFinite进行测试来过滤掉无效日期输入:

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

//测试:

var A1 =

['2007年9月8日,下午4:51:00','11 / 8 / 2001,1:43:00','5/6/2019,上午9:12:00',' 2013年10月27日,上午2:12:00, '10 / 18 / 2004,1:06:00','8/20 / 2000,4:18:00','2015年8月17日,下午5:55:00','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','1/11 / 2000,12:54:00'','2007年1月27日,下午11:14:00', '4/30 / 2000,8:07:00','7/26 / 201,10:15:00 PM','2/10 / 2000,8:25:00'','1/26 / 2009年,12:13:00 PM','2005年4月29日,下午10:38:00','1/24/203,上午3:51:00','1/31 / 2000,1:43 :00 PM','10 / 8 / 2009,1:33:00'','8/4 / 2020,11:31:00 AM','4/27 / 20,20:10:00 PM', '2/13/259,下午6:05:00','7/29 / 2002,3:04:00'','2010年7月18日,3:17:00','2/5 / 2012年,7:09:00 PM','5/20 / 2003,5:44:00 PM','9/15 / 201,1:32:00 AM','4/21 / 2001,11:14 :00 AM','11 / 7/2005,上午9:18:00','7/16 / 201,9:21:00','10 / 13/2028,上午7:29:00', '7/6 / 2017,1:39:00','2016年7月26日,上午6:19:00','2008年5月18日,下午12:45:00','3/21 / 2002年,上午7:05:00','3月22日,下午3:51:00','2014年9月6日,上午1:34:00','鲍勃','4/8/2004 ,1:56:00 PM','12 / 5/2023,上午6:58:00','1/9 / 2001,9:36:00 PM','10 / 28/20 03,7:50:00 PM','10 / 26/2022,2:06:00 PM','7/5 / 207,8:57:00 AM','7/30 / 2001,5:04 :00 PM','6/19 / 2006,4:24:00','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,1053467040000,10673.85亿,1081446960000,1098119160000,1114828680000,1131373080000,1150748640000 ,1169957640000,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(', ');

/ *返回值:(String)

1/1/2000,下午6:41:00,1/11/2000,12:54:00 PM,1/21 / 2000,11:11:00 AM,1/31 / 2000,1:下午43:00,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,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,7/30 / 2001,5:04:00 PM,11/8 / 2001,1:43:00 PM,3/21 / 2002,6:05:00,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,1/27 / 2007,11:14:00 PM,9/8 / 2007,4:51:00 PM,5/18 / 2008,12:45 :00 PM,1/26 / 2009,12:13:00 PM,10/8 / 2009,1:33:00 AM,7/18 / 2010,3:17:00 AM,4/27 / 2011,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 / 201,10:15:00 PM,8/4 / 2020,11:31:00 AM,9/15 / 201,1:32:00 AM,10 / 26/2022,下午2:06:00, 12/5 / 2017,6:58:00 PM,2/13/209:6:05:00 PM,4/27 / 20,20:10:00 PM,7/5 / 20,20:57:00 AM,10/13 / 2008,7:29:00 AM,1/24 / 2017,3:51:00 AM,5/6 / 201,9:12:00 AM * /