我正在尝试验证字段的日期是否在今天之前。我正在使用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
可能会破坏验证吗?
我在这里想念什么?
答案 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
。如果不指定粒度,则默认值将为毫秒。