9

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 接受更广泛的用户输入,并拒绝无效日期?或者图书馆不是为此而设计的?

4

2 回答 2

9
var parsed = moment(myStringDate, 'DD.MM.YYYY');

对于版本 >= 1.7.0 使用:

parsed.isValid()

对于版本 < 1.7.0 创建您自己的 isValid() 函数:

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

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

于 2014-01-14T15:40:33.517 回答
8

您可以尝试解析多种格式。更新小提琴: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

于 2012-05-31T04:43:51.900 回答