如何将 javascript 日期(字符串)与特定格式进行比较

How to compare javascript dates (strings) with a specific format

提问人:Andres SK 提问时间:3/30/2022 最后编辑:Andres SK 更新时间:3/31/2022 访问量:42

问:

我有两个特定格式(字符串)的日期。我需要验证当前日期是否低于允许的最大日期:

var date_current = '03_25_2022';
var date_max = '03_30_2022';

格式将始终为m_d_Y。由于这些在技术上是字符串,因此将它们作为日期进行比较的最佳方法是什么?

我正在使用这个函数,但我不确定方法:

function compareDates(d1, d2){
    var parts = d1.split('_');
    var d1 = Number(parts[1] + parts[2] + parts[0]);
    parts = d2.split('_');
    var d2 = Number(parts[1] + parts[2] + parts[0]);
    return d1 <= d2;
}
JavaScript 日期 日期比较

评论

0赞 Barmar 3/31/2022
用于将其拆分为月、日、年。然后调用从中创建一个日期(不要忘记从月份中减去 1)。然后比较日期。split()new Date()

答:

1赞 Ashok 3/31/2022 #1

您可以先将这些字符串转换为日期对象,然后按如下方式比较它们的时间戳:

function strToDate(str) {
  const splits = str.split('_');
  if (splits.length !== 3) {
    throw Error("Invalid date");
  }
  return new Date(splits[2], parseInt(splits[0]) - 1, splits[1]);
}

let dateCurrent = strToDate('03_25_2022');
let dateMax = strToDate('03_30_2022');

console.log(dateMax.getTime() > dateCurrent.getTime())

评论

0赞 Andres SK 3/31/2022
这似乎比我现在的功能要好。通过将其转换为 Date 对象而不是比较原始字符串的数字值之和来做到这一点是否有优势?(顺便说一句,我把我目前的方法添加到了原来的帖子中)
1赞 Ashok 3/31/2022
@AndresSK 是的,1_1_2021 和 12_31_2020 有一些用例,您的函数会说 12_31_2020 大于 1_1_2021。由于 12_31_2020 的总和> 2063 和 1_1_2021 的总和> 2023。
1赞 Jay Buckman 3/31/2022
你必须对你的工作方法的总和部分进行加权:40*parts[1] + parts[2] + 1000*(parts[0] - 1000) 或类似。2020 年 12 月 31 日 => 1,020,511 和 2021 年 1 月 1 日 => 1,021,041
0赞 Andres SK 3/31/2022
@Ashok 完全理解。刚刚应用了您的解决方案,它就可以工作了。将其标记为已接受的答案,谢谢!