javascript - 日期验证JS
问题描述
我必须以“DD/MM/YYYY”格式进行日期验证。日期必须:
- 不在过去
- 未来最多 6 个月
它工作正常,但它将当天作为无效日期。我尝试了很多东西,但我不知道为什么。也许问题出在如果施工...
let daaa = moment(new Date()).date();
let daaad = moment(new Date()).date();
alert(moment(daaad).isSame(daaa));
也试试new Date().getTime() and getDate()
const selectedDate = new Date(value.split('/').reverse().join('-'));
let today = new Date(Date.now());
let plusSixMonths = new Date(Date.now());
plusSixMonths.setMonth(plusSixMonths.getMonth() + 6);
if (selectedDate >= today && plusSixMonths > selectedDate) return true;
我希望在有效日期中也能捕捉到当前日期。
解决方案
问题是由 引起的Date.now()
,它包括当前时间。因此,如果您正在检查28/10/2019
,那么 2019-10-28T00:00:00 几乎可以肯定是在今天的日期之前,并带有时间部分:
(selectedDate >= today && plusSixMonths > selectedDate)
变成
(2019-10-28T00:00:00 >= 2019-10-28T11:02:32 && 2020-04-28T11:02:32 > 2019-10-28T00:00:00)
这将是false
。
您需要从中删除时间组件today
(new Date()
还将当前时间作为日期对象获取)
let today = new Date();
// set hours, minutes, seconds and milliseconds to zero i.e. 12am
today.setHours(0, 0, 0, 0);
然后您应该能够按预期进行比较。
更新感谢 RobG 指出 setHours 还可以设置分钟、秒和毫秒。
推荐阅读
- c# - 即使 ID 和 Type 正确,也显示不同的数据
- jquery - 如何将 Id 传递给 Jquery 语句 - ASP.NET MVC
- java - 如何使用Java在数据库中存储日期数组?
- android - recyclerview 列表未在 android 中显示
- java - 如何在 Android Studio 中比较两个带有扩展名和名称的图像?
- visual-studio-code - VsCode:展开时折叠其他侧边栏部分(视图/视图)
- angular - 在Angular 8中的http post请求正文中发送图像文件
- c - C:使用按位运算符替换 int 中特定位置的位
- azure-devops - TFS Git 提交消息验证
- javascript - jQuery off 似乎不适用于 dataTable 中的图像