【问题标题】:Date validation JS日期验证JS
【发布时间】:2020-02-23 15:25:46
【问题描述】:

我必须以“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;

我希望还能在有效日期中捕获当前日期。

【问题讨论】:

    标签: javascript date validation momentjs


    【解决方案1】:

    问题是由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 还可以设置分钟、秒和毫秒。

    【讨论】:

    • @dist 如果答案解决了您的问题,请投票并将其标记为已接受的答案。
    • 对不起,我是新来的,是的,答案对我来说是完美的。工作正常。但我的投票不会出现,因为我没有足够的声誉。
    • 这可以像today.setHours(0,0,0,0) 一样短一些。 ;-)
    猜你喜欢
    • 2022-01-11
    • 1970-01-01
    • 2016-10-04
    • 1970-01-01
    • 1970-01-01
    • 2012-12-22
    • 2012-08-06
    • 2016-07-09
    相关资源
    最近更新 更多