如何使用MomentJS正确检查日期是否相同或今天之后?

时间:2018-08-10 13:08:35

标签: javascript jquery momentjs

我正在尝试验证字段的日期是否在今天之前。我正在使用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()对象以TimeZone格式返回日期:2018-08-10T04:00:00.000Z可能会破坏验证吗?

我在这里想念什么?

1 个答案:

答案 0 :(得分:2)

您可以通过将粒度单位指定为第二个参数来指定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/