【问题标题】:Time validation with momentjs使用 momentjs 进行时间验证
【发布时间】:2015-06-16 14:24:18
【问题描述】:

我正在尝试根据用户输入进行时间计算。在触发计算之前,我使用 momentjs 来验证用户时间输入。它似乎表现得很奇怪。例如,这里是浏览器控制台中未定义的输入:

>moment(undefined).isValid()
>true

如何使用 momentjs 来验证用户输入?

编辑:

似乎在严格模式下,您可以验证除带有时区缩写 (EEST) 的日期之外的所有内容:

Tue May 05 2015 12:00:00 GMT+0300 (EEST)

用于缩写的z参数由于浏览器不兼容而被弃用:https://github.com/moment/moment/issues/162

【问题讨论】:

    标签: javascript momentjs


    【解决方案1】:

    如果你限制输入日期的模式 - 你必须使用这样的东西:

    checksDate = moment(date, ['DD-MMMM-YYYY', 'DD.MM.YYYY', 'MM/DD/YYYY', 'YYYY-MM-DD'], true);
    

    这个数组在哪里:

    ['DD-MMMM-YYYY', 'DD.MM.YYYY', 'MM/DD/YYYY', 'YYYY-MM-DD']
    

    是你的模式。 我的 moment 语句中的第三个参数定义了 moment.js 必须使用严格模式。这意味着你不能使用“。”取而代之的是 ISO 格式的“-”:例如“1990-09-01”。 在 Docs 中你可以看到这句话:

    Moment 的解析器非常宽容,这可能会导致不希望的 行为。从 2.3.0 版开始,您可以为最后一个指定布尔值 使 Moment 使用严格解析的参数。严格解析要求 格式和输入完全匹配。

    在浏览器的控制台中:

    moment(undefined).isValid()
    true
    moment(undefined, [], true).isValid()
    false
    

    但强烈建议使用我在上面的示例中使用的模式。 因为没有它 moment.js 可能会在这个日期出错: "01.11.2000""11.01.2000" - 可以是相似的日期,然后您可以使用任意用户输入。

    阅读更多: moment.js Docs about validation

    我希望,很清楚。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-09
      • 1970-01-01
      相关资源
      最近更新 更多