Làm cách nào để xác thực ngày? Ý tôi không phải là định dạng, mà là logic. Ví dụ: ngày 30 tháng 2 không phải là ngày hợp lệ.Ngày Javascript cho phép dữ liệu không hợp lệ (ví dụ: ngày 30 tháng 2)
var date = new Date("2015-02-29T13:02:49.073Z"); // 2015 Feb 29th does not exist
console.log(date.toISOString());
Returns 2015-03-01T13: 02: 49.073Z (01 tháng 3).
Nhưng tôi muốn thông tin rằng ngày này (đầu vào) không hợp lệ.
Chỉnh sửa: Đã thử nghiệm trong Chrome. Firefox trả về "ngày không hợp lệ". Nhưng không phải trên phân tích cú pháp. Chỉ khi ngày được sử dụng (ví dụ: toISOString()) một ngoại lệ được ném.
try
{
var date = new Date("2015-02-29T13:02:49.073Z");
console.log(date.toISOString());
}
catch(e)
{
console.log("error: " + e.message);
}
Firefox:
ngày không hợp lệ
Chrome: (. Không có gì, chỉ cần chuyển sang ngày tiếp theo)
Tóm tắt: Nó phụ thuộc vào trình duyệt. Vì vậy, không nên sử dụng.
Dừng này: Tôi thấy bây giờ mà điều này phụ thuộc vào trình duyệt. Firefox trả lại ngày không hợp lệ và chrome bỏ qua và tính đến ngày hôm sau. Ok, nhưng điều này thật khủng khiếp. Tôi phải viết một hàm riêng để xác thực chuỗi ngày tháng. (?) – Dominik
_Không nên sử dụng Date.parse như cho đến ** ES5 **, việc phân tích cú pháp các chuỗi đã hoàn toàn phụ thuộc vào việc triển khai thực hiện. Vẫn còn nhiều khác biệt về cách các chuỗi ngày phân tích các host khác nhau, do đó các chuỗi ngày phải được phân tích cú pháp theo cách thủ công (một thư viện có thể trợ giúp nếu nhiều định dạng khác nhau được cung cấp) ._ ([ref.] (Https: //developer.mozilla. org/en-US/docs/Web/JavaScript/Tham chiếu/Global_Objects/Ngày/phân tích cú pháp)) – hindmost
Có câu hỏi nào ở đây không? Logic đằng sau cách hàm tạo ngày giao dịch với các đối số khác nhau được ghi đầy đủ trong [* ECMA-262 *] (http://ecma-international.org/ecma-262/6.0/index.html#sec-date-year- tháng-ngày-giờ-phút-giây-ms). Cách xác thực ngày (tức là các giá trị) đã được đề cập trong [* nhiều câu hỏi tại đây *] (http://stackoverflow.com/search?q=%5Bjavascript%5D+validate+a+date). – RobG