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

如何正确检查一个日期是相同的,还是在今天之后与MomentJS?

  •  3
  • ReynierPM  · 技术社区  · 8 年前

    我试图验证一个字段在今天之前没有日期。我正在使用MomentJS和以下函数:

    • 是有效日期,我正在使用 isValid()
    • 与今天或之后相同,我正在使用 isSameOrAfter()

    我就是这样做的:

    $("#btn").click(function(){
        const value = moment(new Date($('#field').val()), 'MM/DD/YYYY', true)
        console.log(value)
      
        //console.log(value.isValid() && value.isSameOrAfter(moment(new Date(), 'MM/DD/YYYY')))
        //console.log(value.isValid() && value.isSameOrAfter(moment()))
        console.log(value.isValid() && value.isSameOrAfter(moment(new Date())))
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
    
    <input type="text" name="field" id="field" />
    <button id="btn">Click Me</button>

    我不确定我可能会错过这里,但正如你所看到的是不工作,我已经尝试了三种不同的方式(评论了上述片段)。

    我注意到的一件事是 moment() 对象以时区格式返回日期: 2018-08-10T04:00:00.000Z 这会破坏验证吗?

    我错过了什么?

    1 回复  |  直到 8 年前
        1
  •  2
  •   Bucket faoud    8 年前

    您可以指定 moment#isSameOrAfter 通过将粒度单位指定为第二个参数:

    const value = moment(new Date($('#field').val()), 'MM/DD/YYYY', true)
    console.log(value.isValid() && value.isSameOrAfter(moment(new Date()), 'day'));
    

    接受的时间单位是: year month week day hour minute second . 如果不指定粒度,矩将默认为毫秒。

    http://jsfiddle.net/dp7rzmw5/24211/