[英]Date validation using moment.js is not giving error on giving invalid date
我正在使用angular js进行验证。 为了进行日期验证,我使用了moment.js
文件。 我的问题是,当我输入的年份为“ 0000”(例如1-1-0000)时,没有给出错误。 我的指令代码如下-
app.directive("validDate", function () {
return {
require: "ngModel",
restrict: "A", // Attributes only
link: function (scope, elem, attr, ctrl) {
ctrl.$validators.cValidDate = function(value) {
if (value === undefined || value === null || value === "") {
return true;
}
return moment(value, ["D-M-YYYY"], true).isValid();
}
}
}
});
有人可以帮助我进行验证吗? 我在这里创建了一个punker- PLUNKER
我已经编辑了脚本,但是仍然会给所有小于1-1-1970的日期给出错误,因为它将日期1-1-0001当作1-1-1970,因此根据它进行验证,当日期中没有值,除非我输入的日期大于1-1-1970,否则日期显示为无效直到。 我想如果年份是0000,则日期无效。 有谁能够帮助我? 我已经用上面的代码更新了我的朋克。
更新-
现在我可以解决日期问题,但是我的问题是,如果日期仍然为空,则错误仍然存在,我不希望在日期为空时出现此错误,我应该为此设置什么条件? 请查看我更新的插件。
回答-
我可以做出回答,因为我添加了以下条件-
if(moment(value, ["D-M-YYYY"], true).isValid()){
// condition
} else
return true;
在这里看到我的新朋克-https://plnkr.co/edit/uKcynQktBCKRYoN7xdM1 ? p = preview
本机JS Date对象认为年份也为零。 根据使用天文年份编号的ISO 8601 ,零年份是可接受的。 在此系统中,年份0 = 1 BCE,年份-1 = 2 BCE,依此类推。
对于许多数据库而言并非如此。 因此,更好地设置日期必须比验证所需的日期更大。
if(moment(value, ["D-M-YYYY"], true).isValid())
{
//alert(moment(value, ["D-M-YYYY"], true).isSameOrAfter(moment("1-1-0001"), ["D-M-YYYY"], true));
if(moment(value, ["D-M-YYYY"]).isSameOrAfter(moment("1-1-0000"), ["D-M-YYYY"]) )
return true ;
else
return false;
}else
{
return false;
}
您可能想添加一个仅检查年份值的函数。 我的解决方案不是很好,但是可以解决问题。
function checkYear (v) {
v = v.split("-");
if(v[2] === "0000"){
return true;
}
/* or you could go for a year of your choice*/
/*
if(parseInt(v[2]) <= 1900){
return true;
}
*/
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.