javascript - 如何使用 MomentJS 正确检查日期是否相同或晚于今天?

标签 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() 对象返回时区格式的日期:2018-08-10T04:00:00.000Z 这可能是打破验证?

我在这里缺少什么?

最佳答案

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

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

接受的时间单位是: 小时 分钟 。如果不指定粒度,moment 将默认为毫秒。

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

关于javascript - 如何使用 MomentJS 正确检查日期是否相同或晚于今天?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51787295/

相关文章:

javascript - g.size() 不是函数 - Jquery 错误

javascript - 我如何在 Meteor 中隐藏动态元素?

javascript - 如何使用 document.evaluate 查询 svg 元素?

jquery - 如何延迟函数的执行 - jQuery

javascript - 使用 moment.js,如果我使用 VPN,我的日期或日期时区可以更改吗?

javascript - 按年和周数获取日期并返回周数和年数

javascript - 正则表达式优化和最佳实践

javascript - 如何计算 IIIF 旋转图像的高度和宽度

jquery bbq - 检测用户何时单击后退按钮

javascript - 用 a4 尺寸缩放 div 和表格