首页 > 解决方案 > 日期验证JS

问题描述

我必须以“DD/MM/YYYY”格式进行日期验证。日期必须:

它工作正常,但它将当天作为无效日期。我尝试了很多东西,但我不知道为什么。也许问题出在如果施工...

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;

我希望在有效日期中也能捕捉到当前日期。

标签: javascriptdatevalidationmomentjs

解决方案


问题是由 引起的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

您需要从中删除时间组件todaynew Date()还将当前时间作为日期对象获取)

let today = new Date();
// set hours, minutes, seconds and milliseconds to zero i.e. 12am
today.setHours(0, 0, 0, 0);

然后您应该能够按预期进行比较。

更新感谢 RobG 指出 setHours 还可以设置分钟、秒和毫秒。


推荐阅读