我想告诉JS中有效和无效日期对象之间的区别,但无法弄清楚如何:
var d = new Date("foo");
console.log(d.toString()); // shows 'Invalid Date'
console.log(typeof d); // shows 'object'
console.log(d instanceof Date); // shows 'true'
Run Code Online (Sandbox Code Playgroud)
编写isValidDate函数的任何想法?
Date.parse用于解析日期字符串,它提供了一种检查日期字符串是否有效的权威方法.Date实例,这最容易验证.Date实例,然后测试它Date的时间值.如果日期无效,则时间值为NaN.我用ECMA-262检查了这个行为是标准的,这正是我正在寻找的.以下是场景:
我有一个不同的String日期和日期格式.例:
日期:2016-10-19
dateFormat:"DD-MM-YYYY".
我需要检查这个日期是否有效.
我试过以下事情
var d = moment("2016-10-19",dateFormat);
Run Code Online (Sandbox Code Playgroud)
d.isValid()false每次都会回来.Moment.js是否以给定格式解析日期?
然后我尝试DD-MM-YYYY先将日期格式化,然后将其传递给Moment.js:
var d = moment("2016-10-19").format(dateFormat);
var date = moment(d, dateFormat);
Run Code Online (Sandbox Code Playgroud)
现在date.isValid()给我想要的结果,但是这里Moment.js日期对象被创建了两次.我怎么能避免这个?有更好的解决方案吗?
仅供参考我不允许改变dateFormat.
我有这个问题......我没有发现任何类似的东西,似乎很奇怪没有人用moment.js验证时间这个问题.
moment('03:55', 'HH:mm').isValid(); //true
moment('03:55jojojo', 'HH:mm').isValid(); //true
moment('03:55jojojo', 'HH:mm',true).isValid(); //true
Run Code Online (Sandbox Code Playgroud)
难道我做错了什么?这是一个例子:
我需要验证用户的日期并检查它是否采用特定格式.如果是,那么它将被接受,否则它将不会.我正在寻找那种
value.match("regular expression")
Run Code Online (Sandbox Code Playgroud)
以上工作正常,如果我必须选择几种格式.所以,我遇到了这个时刻.有兴趣知道如何使用isSame().我尝试实现但不成功.喜欢 :
var x=moment("MM/DD/YYYY") ;
x.isSame("28-02-1999"); // am getting false which is right
var x=moment("28-02-1999","DD-MM-YYYY") ;
x.isSame("28-02-1999"); // am getting false which is wrong
Run Code Online (Sandbox Code Playgroud)
所以,请帮忙.谢谢
运行moment.js,2.2.1
moment("2010-10-319", ["YYYY-MM-DD"]).isValid()
Run Code Online (Sandbox Code Playgroud)
...返回true,并将moment对象设置为2010年10月31日.解析器似乎剥离了任何类型的无关字符:
moment("2010-10-31a", ["YYYY-MM-DD"]).isValid(); // true
Run Code Online (Sandbox Code Playgroud)
Curiouser,如果你添加额外的格式选择,那么"剥离"仅限于一个角色!(格式字符串测试不应该是ORed吗?)
moment("2010-10-319", ["MM/DD/YYYY", "MM-DD-YYYY", "YYYY-MM-DD"]).isValid(); // true
moment("2010-10-3199", ["MM/DD/YYYY", "MM-DD-YYYY", "YYYY-MM-DD"]).isValid(); // false (!!!)
Run Code Online (Sandbox Code Playgroud)
这种行为是设计的吗?我不明白为什么.
编辑:评论者发现另一个案例,其中超出一个的额外字符确实被剥离:
moment("2010-10-319qr", ["MM/DD/YYYY", "MM-DD-YYYY", "YYYY-MM-DD"]).isValid(); // true (!)
Run Code Online (Sandbox Code Playgroud)
这是在行动:http://jsfiddle.net/grahampcharles/r42jg/6/(更新新案例)