使用特定格式验证时刻 js 中的日期

Posted

技术标签:

【中文标题】使用特定格式验证时刻 js 中的日期【英文标题】:Validate date in momemnt js with specified format 【发布时间】:2021-07-18 02:03:37 【问题描述】:

我正在尝试使用moment js进行验证,如下图,它返回true,这是正确的。

moment("10/22/2021","MM/DD/YYYY", true).isValid()

但在某些情况下,我将日期或月份部分作为一位数字,在这些情况下,它将返回 false。有人可以帮助我如何处理这种情况。

moment("4/22/2021","MM/DD/YYYY", true).isValid() -- 想要返回 true

需要考虑的要点:我不想删除设置为 true 以进行严格检查的最后一个参数。日期参数可以随任何 serprator 一起提供。 (意味着它可以像'3-22-2021'、'2.12.2020'、'2_12_2020')。因此,基于 serprator 拆分日期并在日期或月份前添加 0 的建议将不起作用。 或者如果你能建议如何找到合适的 serprator 也会有所帮助

【问题讨论】:

【参考方案1】:

您可以使用toLocaleDateString方法获取“MM/DD/YYYY”格式的标准日期,但它不适用于“_”,您必须replace,以下示例供参考。

let d = new Date("2-3-2011");

console.log(d.toLocaleDateString());

d = new Date("2.3.2011");

console.log(d.toLocaleDateString());

d = new Date("2/3/2011");

console.log(d.toLocaleDateString());

d = new Date(("2_3_2011").replace(/_/g,"-"));

console.log(d.toLocaleDateString());

【讨论】:

【参考方案2】:

考虑到12/02/21XX12/2/21XX 都可以通过M/D/YYYY 进行验证。因此,您可以使用它并评估传入日期的格式并将其传递给执行其余操作的那一刻。

import moment from "moment";
        const date = "10/22/2021";
        let dateFormat;
        if(date.includes("/"))
        dateFormat = 'M/D/YYYY';
        else if(date.includes("."))
        dateFormat = 'M.D.YYYY';
        else if(date.includes("-"))
        dateFormat = 'M-D-YYYY';
        else if(date.includes("_"))
        dateFormat = 'M_D_YYYY';
        
        const date_item = moment(date, dateFormat, true).isValid();
        console.log(date_item)

【讨论】:

以上是关于使用特定格式验证时刻 js 中的日期的主要内容,如果未能解决你的问题,请参考以下文章

节点js中的日期格式转换

Chrome 不接受使用 jQuery 验证的特定日期格式

js中怎么吧long型的日期转换成String类型的

日期选择器中带有时刻 js 的无效日期

如果列的值在 Oracle sql 中的格式不同,则使用特定格式更新日期

更改日期格式以使用数据库进行验证