排序日期格式不正确

杰特

我从excel工作表中获取输入,并且日期不是可以操作的正确ISO格式,即该列如下所示,我正在尝试使用javascript日期和时间将其转换为正确的日期来对其进行排序没有得到适当的输出,我可以在此问题上使用第二种意见。

  • 输入值 ["28/02/23","31/12/21","31/05/21","30/09/23","31/10/22","30/09/21","30/06/23","31/05/22","30/04/21","31/07/21","30/06/21","28/02/22","31/12/22","30/06/22","31/08/21","30/04/22","31/10/20","31/08/22","31/07/22","31/05/23","31/01/23","30/04/23","30/09/22","28/02/21","30/11/20","30/11/21","31/01/21","31/03/23","31/01/22","31/07/23","31/12/20","31/03/21","31/08/23","30/11/22","31/10/21","31/03/22","30/09/20"]

  • 我写的方法

    dateCompare = (d1, d2) => {
      let d1Component = d1.toString().split('/')
        , d2Component = d2.toString().split('/')
        , rD1 = new Date(parseInt(20 + d1Component[2]), d1Component[1] - 1, d1Component[0])
        , rD2 = new Date(parseInt(20 + d2Component[2]), d2Component[1] - 1, d2Component[0])
      return moment(rD1).isAfter(moment(rD2))
    }
    
  • 我从上述方法中得到的输出我 ["30/09/35", "28/02/23", "31/05/21", "31/12/21", "31/10/22", "30/09/21", "30/09/20", "31/05/22", "30/04/21", "31/07/21", "30/06/21", "28/02/22", "31/12/22", "30/06/22", "31/08/21", "30/04/22", "31/10/20", "31/08/22", "31/07/22", "31/03/22", "31/01/23", "31/10/21", "30/09/22", "28/02/21", "30/11/20", "30/11/21", "31/01/21", "30/11/22", "31/01/22", "31/03/21", "31/12/20", "31/01/37", "31/07/23", "31/03/23", "30/04/23", "31/05/23", "30/06/23", "30/04/37", "31/10/23", "31/08/23", "30/09/23", "30/06/37", "29/02/24", "30/11/23", "31/12/23", "31/01/24", "31/08/37", "31/07/24", "31/03/24", "30/04/24", "31/05/24", "30/06/24", "30/11/37", "31/01/25", "31/08/24", "30/09/24", "31/10/24", "30/11/24", "31/12/24", "31/03/38", "31/08/25", "28/02/25", "31/03/25", "30/04/25"]相信根本不会以任何方式进行排序。

Aplet123

比较函数应返回小于等于的负数,大于0等于等于而不是true/的正数false另外,由于您已经在使用moment,因此也可以使用它来解析日期:

function dateCompare(d1, d2) {
    const d1Parsed = moment(d1, "DD/MM/YY");
    const d2Parsed = moment(d2, "DD/MM/YY");
    if (d1Parsed.isBefore(d2Parsed)) {
        return -1;
    } else if (d1Parsed.isSame(d2Parsed)) {
        return 0;
    } else {
        return 1;
    }
}

或者,取其时间戳记之差(如果d1Parsedd2Parsed之前,则其时间戳记将较小,因此所得的减法将为负,如果相等,则为0,如果较大则为正,进行与之前的代码相同):

function dateCompare(d1, d2) {
    const d1Parsed = moment(d1, "DD/MM/YY");
    const d2Parsed = moment(d2, "DD/MM/YY");
    return d1Parsed.valueOf() - d2Parsed.valueOf();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章