请参阅以下代码:
$.validator.addMethod("agerangevalidation", function (value, elements, params) {
if (value) {
var valDate = new Date(value);
var today = new Date();
var birthDate = new Date(value); //line 7
var age = today.getFullYear() - birthDate.getFullYear();
var m = today.getMonth() - birthDate.getMonth();
if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
if (age < parseInt(params.minage) || age > parseInt(params.maxage))
{
//Validation failed
return false;
}
}
return true;
});
如果传递的值大于该月的第12个,则将其解析为错误的日期。这是datepicker代码:
<script type="text/javascript">
$(function () {
$("#datepicker").datepicker({
dateFormat: "dd/mm/yy",
changeMonth: true,
changeYear: true,
yearRange: "-150:+0"
});
});
</script>
如何在Javascript代码中指定字符串的格式?
更新
继续下面的回答后,我安装了Momentum.js并将第一段JavaScript的第7行更改为:
var birthDate = moment(value).format('DD/MM/YYYY');
我将16/08/1999传递给该职能,生日变为08/04/2000。我做错了什么?
答案 0 :(得分:0)
Javascript格式为 MM / DD / YYYY 且您的日期选择器格式为 DD / MM / YYYY ,这就是您遇到此问题的原因,我遇到了同样的问题之前,我使用dateFormat修复它: mm / dd / yyyyy ,或者你也可以使用 YYYY / MM / DD 。
你可以尝试使用这些控制台,也许这可以帮助你理解
new Date("2017/2/1");
//Wed Feb 01 2017 00:00:00 GMT+0800 (note it detect yyyy/mm/dd)
new Date("1/2/2017");
//Mon Jan 02 2017 00:00:00 GMT+0800 (note it detect mm/dd/yyyy)
new Date("13/2/2017");
//Invalid Date no month 13
<强>更新强>
根据更新,您需要基于格式的精确时间解析器, 为此你应该使用Momentjs 这将是这样的
moment(value, 'DD/MM/YYYY').format();
了解更多信息