【问题标题】:how can i compare date strings?我如何比较日期字符串?
【发布时间】:2018-11-27 13:20:37
【问题描述】:

我需要检查 date 是否在 minDatema​​xDate 之间。 但是当我尝试与 minDate 进行比较时,我应该得到有效的假但我得到了真..

            let minDate = "27-05-2019";
        let maxDate = "27-05-2019";
        let date = "13-02-2018";
        var valid;

        if(new Date(date.replace( /(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3")).toDateString() >= new Date(minDate.replace( /(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3")).toDateString()){
            valid = true;
            } else {
            valid = false;
            }
            
            console.log(valid);

提前致谢

【问题讨论】:

  • 您可以使用 JavaScript 中的 Date 对象:wiki.base22.com/btg/…
  • 您正在比较日期的字符串表示形式。直接比较日期。

标签: javascript typescript date


【解决方案1】:

带有几个辅助函数的普通 JS 解决方案:

const splitMyDateString = str => {
  const [day, mon, yr] = str.split('-').map(Number);
  return [yr, mon, day];
};

const makeDate = ([yr, mon, day]) => {
  return new Date(yr, mon - 1, day);
};

let minDate = makeDate(splitMyDateString("27-05-2019"));
let maxDate = makeDate(splitMyDateString("27-05-2019"));
let date = makeDate(splitMyDateString("13-02-2018"));
let valid = (date >= minDate) && (date <= maxDate);

请注意,不保证 Date 构造函数接受除 ISO 8601 格式之外的字符串。所以在这里我们通过integers instead。另请注意,我们必须从月份中减去 1,因为 JS 月份是 0-11,而不是 1-12。

【讨论】:

    【解决方案2】:

    使用moment.js

    isBetween - link

    moment().isBetween(moment-like, moment-like);
    

    示例

    let minDate = "27-05-2019";
    let maxDate = "27-05-2019";
    let date = "13-02-2018";
    
    moment(date).isBetween(moment(minDate), moment(maxDate));
    

    【讨论】:

    • 我只需要与普通的javascript进行比较
    • @NandhaKumar 虽然我有一些同情(时刻是负载的大量增加,只是为了比较几个日期),这应该是在问题本身。
    • @LukeWalker 您的纯 JS 答案是错误的,或者充其量是不完整的:他 Date 对象构造函数仅(根据规范)保证可以使用 ISO 8601 格式的整数参数或日期字符串,您的不是。
    • 感谢@luke。如果你真的觉得这个问题有用,请给这个问题投票。
    【解决方案3】:

    当您使用toDateString() 方法时,您将Date 对象转换为字符串,因此您只比较if 中的两个字符串。

    删除此方法调用,它应该可以工作。

    let minDate = "27-05-2019";
    let maxDate = "27-05-2019";
    let date = "13-02-2018";
    var valid;
    
    if (new Date(date.replace( /(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3")) >= new Date(minDate.replace( /(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3"))) {
      valid = true;
    } else {
      valid = false;
    }
    
    console.log(valid);

    【讨论】:

    • @JaredSmith,你是对的 :),只是继续使用它正在使用的日期,但在转换为 Date 之前将日期拆分为整数可能会更好。
    【解决方案4】:

    您可以使用 JavaScript 日期方法:https://www.w3schools.com/js/js_date_methods.asp

    let minDate = new Date("2018-01-13"),
        maxDate = new Date("2018-03-13"),
        date = new Date("2018-02-13"),
        valid = false;
    
    if (date.getTime() >= minDate.getTime() && date.getTime() <= maxDate.getTime()) {
        valid = true;
    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多