2017-04-25 283 views
1

我有这样的代码:日期排序的JavaScript

<script type="text/javascript"> 
    function abc(objarray) { 
    objarray = objarray.sort(function (a, b) { return new Date(a).getTime() - new Date(b).getTime() }); 
    alert(objarray); 
} 
objarray = ["16.08.1993 11:13", "16.08.1994 11:12", "13.08.1994 11:12", "13.08.1996 10:12", "08.08.1996 10:12"]; 
abc(objarray); 
</script> 

日期时间格式:dd.MM.yyyy HH:MM

我要进行排序,以便我可以先获得最新的日期,但它不工作。

+2

您在'new Date(a).getTime()'上有'无效日期'。您需要在比较日期之前解析 –

+5

您传递的日期字符串无效。代表日期的字符串值。该字符串应采用Date.parse()方法(IETF兼容的RFC 2822时间戳和ISO8601的一个版本)识别的格式。 – WilomGfx

回答

2

你需要切换ab,并采取另一个字符串比较,像

1993-08-16 11:13 

ISO 6801数据和时间格式,至极是媲美。

function abc(objarray) { 
 
    objarray = objarray.sort(function(a, b) { 
 
     function getISO(s) { 
 
      return s.replace(/(..).(..).(....) (.....)/, '$3-$2-$1 $4'); 
 
     } 
 
     return getISO(b).localeCompare(getISO(a)); 
 
    }); 
 
} 
 

 
var objarray = ["16.08.1993 11:13", "16.08.1994 11:12", "13.08.1994 11:12", "13.08.1996 10:12", "08.08.1996 10:12"]; 
 
abc(objarray); 
 

 
console.log(objarray);

+0

@NinaScholz现在它在正确的方式工作 –

-1

试试这个:

String.prototype.getCorrectDate = function() { 
    var date = this.split(' ')[0]; 
    var hours = this.split(' ')[1]; 

    var dateSplitted = date.split('.'); 
    return new Date(dateSplitted[2] + '.' + dateSplitted[1] + '.' + dateSplitted[0] + ' ' + hours); 
}; 

var dates = ["16.08.1993 11:13", "16.08.1994 11:12", "13.08.1994 11:12", "13.08.1996 10:12", "08.08.1996 10:12"]; 

var sorted = dates.sort(function(a, b) { 
    return b.getCorrectDate() - a.getCorrectDate();  
}); 

alert('First from sorted: '+ sorted[0]); 
alert('Last from sorted: '+ sorted[sorted.length - 1]); 

https://jsfiddle.net/Lcq6wqhb/

JavaScript的本地方法sort用于数组排序,我们可以通过回调函数假设sorting behaviorSorting an array of JavaScript objects) 。 但在排序之前,我们需要将date字符串转换为正确的格式,以接受new Date(dateString)作为参数,否则会给出错误Invalid Date。 我正在转换dd.mm.yyyy hh:MMyyyy.mm.dd HH:MM使用getCorrectDate方法

+0

请添加一些解释为什么/这个代码如何帮助OP。这将有助于提供未来观众可以从中学习的答案。请参阅[这个元问题及其答案](http://meta.stackoverflow.com/q/256359/215552)了解更多信息。 –

+0

是的,增加了.... – Arkadi

+1

如果你要解析一个字符串来创建一个Date,直接将这些部分传递给Date构造函数(例如'return new Date(dateSplitted [2],dateSplitted [1] -1, ...)'),不要为内置解析器解析另一个字符串,尤其是一个在至少某些浏览器中已知失败的字符串(请参阅[*为什么Date.parse会提供不正确的结果?]]( http://stackoverflow.com/questions/2587345/why-does-date-parse-give-incorrect-results)) – RobG