【问题标题】:MomentJS - Intended for input validation?MomentJS - 用于输入验证?
【发布时间】:2012-05-23 00:10:30
【问题描述】:

MomentJS 是否用于用户输入解析?

我已经与简单的案例比较接近,让它接受 DDMMYYYY 顺序中的日期,并且它可以处理一些变化。

在指定格式时,它不能很好地处理无效日期 - 包括日期值太高,或在 2 位和 4 位数字之间切换年份值。

年份解释示例:

var date1 = moment('30082012', 'DDMMYYYY');
var date2 = moment('30082012', 'DDMMYY'); // Gives wrong year - 2020
var date3 = moment('300812', 'DDMMYYYY'); // Gives wrong year - 1900
var date4 = moment('300812', 'DDMMYY');

可能是无效日期的示例:

var date5 = moment('08302012', 'DDMMYYYY'); // Gives Jun 08 2014
var date6 = moment('08302012', 'DDMMYY'); // Gives Jun 08 2022
var date7 = moment('083012', 'DDMMYYYY'); // Gives Jun 08 1902
var date8 = moment('083012', 'DDMMYY'); // Jun 08 2014

我用这些例子创建了一个 JS Fiddle:http://jsfiddle.net/cHRfg/2/

有没有办法让 moment 接受更广泛的用户输入,并拒绝无效日期?或者图书馆不是为此而设计的?

【问题讨论】:

    标签: parsing date momentjs


    【解决方案1】:
    var parsed = moment(myStringDate, 'DD.MM.YYYY');
    

    对于版本 >= 1.7.0 使用:

    parsed.isValid()
    

    对于版本

    function isValid(parsed) { 
        return (parsed.format() != 'Invalid date');
    }    
    

    查看文档: http://momentjs.com/docs/#/parsing/is-valid/

    【讨论】:

      【解决方案2】:

      您可以尝试解析多种格式。更新小提琴:http://jsfiddle.net/timrwood/cHRfg/3/

      var formats = ['DDMMYYYY', 'DDMMYY'];
      var date1 = moment('30082012', formats);
      var date4 = moment('300812', formats);
      

      这里是相关文档。 http://momentjs.com/docs/#/parsing/string-formats/

      在添加 moment.fn.isValid 方面进行了开发,这将允许您像示例 5-8 中那样进行验证。它将在 1.7.0 版本中添加。 https://github.com/timrwood/moment/pull/306

      【讨论】:

        猜你喜欢
        • 2017-04-22
        • 2012-04-11
        • 2011-08-09
        • 1970-01-01
        • 1970-01-01
        • 2018-11-22
        • 1970-01-01
        • 2017-12-17
        • 2018-04-13
        相关资源
        最近更新 更多