2016-06-09 57 views
0

我想排序日期数组。它完美无瑕。但是5月4日被列在阵列的最后一个元素中,这是错误的。你能帮我解决这个问题吗?接收如何使用javascript对日期数组进行排序?

var listOfString = "2016-05-24|Failed,2016-05-04|Failed,2016-04-19|Passed,2016-04-15|Passed,2016-06-01|Failed"; 
     var arrayStrings = listOfString.split(','); 
     var dateArray = new Array(); 
     var count = 0; 
     for (var i = 0; i < arrayStrings.length; i++) { 
      dateArray[count++] = new Date(arrayStrings[i].split('|')[0]); 
     } 
     dateArray.sort(); 

     for (var i = 0; i < dateArray.length; i++) { 
      alert(dateArray[i]); 
     } 

输出作为

Fri Apr 15 2016 05:30:00 GMT+0530 (India Standard Time) 
Tue Apr 19 2016 05:30:00 GMT+0530 (India Standard Time) 
Tue May 24 2016 05:30:00 GMT+0530 (India Standard Time) 
Wed Jun 01 2016 05:30:00 GMT+0530 (India Standard Time) 
Wed May 04 2016 05:30:00 GMT+0530 (India Standard Time) 
+1

由于它们已经在y-m-d顺序中并且前面的零,为什么不把它们排序为字符串呢?同样使用'console.log'查看结果,警报不是一个好方法。 –

回答

0

解决方案:

var listOfString = "2016-05-24|Failed,2016-05-04|Failed,2016-04-19|Passed,2016-04-15|Passed,2016-06-01|Failed"; 
     var arrayStrings = listOfString.split(','); 
     var dateArray = new Array(); 
     var count = 0; 
     for (var i = 0; i < arrayStrings.length; i++) { 
      dateArray[count++] = arrayStrings[i].split('|')[0]; 
     } 
     dateArray.sort(); 

     for (var i = 0; i < dateArray.length; i++) { 
      console.log(dateArray[i]); 
     } 
1

由于您降序(YMD),并与前面的零的值作为字符串这意味着它们是可排序也作为字符串。在这种情况下,您不需要进行任何转换,只需在拆分后将其排序为字符串数组即可。

0

更改date.sort()这个

dateArray.sort(function(a,b) { 
     return a-b; 
    }); 

返回

VM126:57 Fri Apr 15 2016 05:30:00 GMT+0530 (IST) 
VM126:57 Tue Apr 19 2016 05:30:00 GMT+0530 (IST) 
VM126:57 Wed May 04 2016 05:30:00 GMT+0530 (IST) 
VM126:57 Tue May 24 2016 05:30:00 GMT+0530 (IST) 
VM126:57 Wed Jun 01 2016 05:30:00 GMT+0530 (IST) 

您认为.sort()会自动处理日期,但不幸的是,事实并非如此。它要么只是alphabeticalnumerical排序,这是你的结果。为了解决这个问题,我添加了一个回调函数,该函数将确定一个项目是否在冒泡排序中的前面或后面,并且减去日期返回两个日期之间的秒数,这将是一个数字,并且易于减去并返回这种差异。

相关问题