我发现问题出在 JQuery 验证中。它调用 javascript Date 构造函数来检查日期是否有效:
// http://docs.jquery.com/Plugins/Validation/Methods/date
date: function(value, element) {
return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
},
由于 javascript Date 构造函数期望格式为 yyyy-MM-dd 的日期,因此它返回 Invalid 的日期为葡萄牙语格式 dd-MM-yyy。
例外是 IE,它不返回 Invalid,而是返回与我们介绍的日期不同的日期。
解决方案是使用代码创建一个 jquery.validate-pt.js 以使用我们格式的正确验证来覆盖验证:
$.validator.methods.date = function (value, element) {
return this.optional(element) || ( /^\d{1,2}[\/-]\d{1,2}[\/-]\d{4}(\s\d{2}:\d{2}(:\d{2})?)?$/.test(value)
&& !/Invalid|NaN/.test(new Date(value.replace("/", "-").split("-")[2], value.replace("/", "-").split("-")[1], value.replace("/", "-").split("-")[0])));
}