Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 回调函数将日期排序为字符串_Javascript_Sorting - Fatal编程技术网

Javascript 回调函数将日期排序为字符串

Javascript 回调函数将日期排序为字符串,javascript,sorting,Javascript,Sorting,我在JS中有一个字符串数组,表示格式为M/D/Y的日期,其中M和D可以各有一个或两个数字。 如何编写回调函数对该数组进行排序?Date.parse()(新日期(字符串)与之等效)在JS实现中不一致,因此我可能应该首先手动解析日期字符串以确保一致性,然后完全按照Minko Gechev的建议执行: array.sort(function (d1, d2) { function parseDate(str) { var parts = str.match(/(\d+)/g); /

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

Date.parse()(新日期(字符串)与之等效)在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.parse()(与新日期(字符串)等效)在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);
});

另一方面,我认为存储日期对象而不是字符串,然后在需要时将日期格式化为字符串作为输出,这几乎总是比存储日期对象要好,因为这样可以使这种操作更容易,也使代码更清晰。

您还可以将字符串拆分为其m d y分量,并比较这些分量

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

您还可以将字符串拆分为其m d y分量,并比较这些分量

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

请发布现有代码。请发布现有代码。我同意,但源日期不是我存储的。我同意,但源日期不是我存储的。