Я обнаружил, что проблема была в проверке JQuery. Он вызывает конструктор даты javascript для проверки правильности даты:
// 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, он вернул недопустимые даты в португальском формате 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])));
}