代码之家  ›  专栏  ›  技术社区  ›  Ess

我可以用js比较这两个日期吗?

  •  -1
  • Ess  · 技术社区  · 5 年前
    console.log("201905300545_201905300555"  < "201905300535_201905300545")
    

    我想知道第一个日期范围是否大于第二个日期范围。

    UPD:我问这个问题是因为我的同事用这种非常简单的方式比较这些日期。它只在日期采用这种格式(yyyy-mm-dd-hh-mm-ss)时工作,因此js按字母顺序比较它们。

    2 回复  |  直到 5 年前
        1
  •  2
  •   Cody Geisler    5 年前

    您可以将日期解析为 moment 然后使用 瞬间 diff 函数比较持续时间、日期、开始或结束或任何组合。

    对于给定的用例“是第二个开始日期之前的开始日期还是第二个结束日期之前的结束日期?”来说,您同事比较日期的方式可能是javascript中最快的方式。

    let s1 = "201905300545_201905300555";
    let s2 = "201905300535_201905300545";
    let m = t => moment(t,"YYYYMMDDhhmm");
    let rng1 = s1.split("_").map(m);
    let rng2 = s2.split("_").map(m);
    console.log(rng1[1].diff(rng1[0]) < rng2[1].diff(rng2[0]));
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
        2
  •  0
  •   Jonas Wilms    5 年前

    首先,你必须得到它们所代表的范围(通过减去它们):

     const range = r => {
       const [start, end] = r.split("_");
       return +end - +start;
     };
    
     console.log(range("201905300545_201905300555") < range("201905300535_201905300545"));
    
        3
  •  0
  •   salixor    5 年前

    下面是一个只使用javascript的解决方案:

    let parseDate = (date => {
        let [l, year, month, day, hour, minute, ...r] = date.match(/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})/);
        return new Date(year, month-1, day, hour, minute);
    });
    
    let [d1, d2] = '201905300545_201905300555'.split('_').map(parseDate);
    let [d3, d4] = '201905300535_201905300545'.split('_').map(parseDate);
    
    console.log(d2 - d1 < d4 - d3);