Tôi đang cố gắng xây dựng trình xác nhận hợp lệ sẽ làm việc với DefaultModelBinder .NET của việc sử dụng DateTime.Parse để chuyển đổi một chuỗi từ dạng biểu mẫu thành một DateTime. Tôi không muốn phải đợi cho đến khi một ngày đã được đăng lên máy chủ để nó nhận ra đó là một ngày tồi tệ.Javascript tương đương với .NET DateTime.Parse
Hiện nay jquery.validate sử dụng đoạn mã sau để xác nhận trường ngày:
// http://docs.jquery.com/Plugins/Validation/Methods/date
date: function(value, element) {
return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
}
Tuy nhiên, do ngày phân tích cú pháp khủng khiếp Javascript, đây:
275481/69/100089
Sẽ đánh giá là hợp lệ, đến ngày 12 tháng 9 năm 275760.
Trong khi trên Mặt khác, điều này:
11-19-2013
sẽ đánh giá như không hợp lệ.
Tất nhiên, tôi hiểu rằng DateTime.Parse() của C# có những thứ như văn hóa (nội địa hóa) và năm nhuận, và tôi có thể sống với giả định một nền văn hóa cố định (Hoa Kỳ) và cho phép "02-29-2013 "trên máy khách và khởi động nó ở máy chủ (lý tưởng là không, nhưng có thể chấp nhận được).
Nhưng tôi không thể tin rằng một người nào đó đã không đặt cùng một trình xác thực ngày tốt hơn để làm việc với C# 's DateTime.Parse() logic.
Có thể ai đó có, tôi chưa tìm thấy - đó là lý do tôi đăng bài ở đây. Và tôi biết tôi có một số cách để đi về điều này - từ cực kỳ đơn giản (kém chính xác) đến vô cùng phức tạp (chính xác hơn), nhưng tôi hy vọng một người nào đó đã đi xuống con đường này và tìm thấy điểm ngọt ngào.
DateJS có thể thích hợp ở đây, nhưng phải thừa nhận, thậm chí sau đó, nó không hoàn hảo. http://www.datejs.com/ –
Expresssions thông thường? –
@GrantH. Tôi nghĩ về date.js, nhưng như bạn đã nói, có vẻ như nó có những thiếu sót của nó. Đó có thể là cách tôi sẽ đi - có lẽ trong sự kết hợp với các biểu thức thông thường - nếu tôi không nhận được gợi ý tốt hơn ở đây. –