0

我在 JS 中有一个字符串数组,它们表示格式为 M/D/Y 的日期,其中 M 和 D 可以分别有一个或两个数字。如何编写回调函数对这个数组进行排序?

4

2 回答 2

3

Date.parse() (与 new Date(string) 等效)在 JS 实现中不一致,因此我可能应该首先手动解析日期字符串以保持一致性,然后完全按照 Minko Gechev 的建议进行操作:

array.sort(function (d1, d2) {
  function parseDate(str) {
    var parts = str.match(/(\d+)/g);
    // assumes M/D/Y date format
    return new Date(parts[2], parts[0]-1, parts[1]); // months are 0-based
  }
  return parseDate(d1) - parseDate(d2);
});

顺便说一句,我认为您几乎总是最好存储 Date 对象而不是字符串,然后在需要输出时将 Dates 格式化为字符串,因为它使这种操作更容易,并使你的代码也更清晰。

于 2012-11-24T22:51:29.493 回答
1

您还可以将字符串拆分为它们的 mdy 组件并比较组件。

array.sort(function(a,b){
  var a1= a.split('/'), b1=b.split('/');
  if(a1[2]==b1[2]){
    return (a1[0]==b1[0])? a1[1]-b1[1]: a1[0]-b1[0];
  }
  return a1[2]-b1[2];
}
于 2012-11-25T00:37:56.593 回答