2013-03-08 20 views
6

Tôi đang sử dụng một phương pháp để kiểm tra xem một ngày là hợp lệ hay không trong ứng dụng của tôiJavascript Date.parse phương pháp không làm việc một cách chính xác

myApp.isValidDate = function(date) { 
    var timestamp; 
    timestamp = Date.parse(date); 
    if (isNaN(timestamp) === false) { 
    return true; 
    } 
    return false; 
}; 

Nó hoạt động một cách chính xác trong hầu hết các trường hợp, nhưng khi tôi nhập giá trị như "something.com Eq Phone 1" ngày. phân tích cú pháp trả về 978300000000 và phương thức trả về true

cách phân tích cú pháp đó làm ngày thực tế?

Trả lời

3

Hành vi này không nhất quán trên các trình duyệt. Trong IE9 và FireFox, Nan được trả về đúng, nhưng trong Chrome, dường như suy nghĩ something.com Eq Phone 1 là ngày 1 tháng 1 năm 2001.

Tôi không sử dụng thư viện này, nhưng tại sao không kiểm tra DateJS? Tôi đã sao chép trong something.com Eq Phone 1 vào bản trình diễn của họ và nó không tạo ra một ngày hợp lệ.

Edit:

Là tại sao điều này xảy ra, nhìn vào date parsing source code từ Chromium, chúng ta có thể thấy những ý kiến:

Bất kỳ từ không được công nhận trước số đầu tiên được bỏ qua.

MM và DD mặc định là 01 nếu thiếu

mm, ss, và mặc định sss đến 00 nếu thiếu

nào có thể giải thích lý do tại sao nó được quản lý để chuyển đổi (về cơ bản) số 1 vào một ngày hợp lệ.

Chỉnh sửa 2:

Vì vậy, để làm rõ, số lượng trong something.com Eq Phone 1 xuất hiện để chỉ tháng. Ví dụ, thay đổi 1 đến một 3 cho ngày 01 tháng 3, 2001.

Ở giai đoạn này, tôi không thể tìm thấy bất kỳ bằng chứng chắc chắn rằng giá trị mặc định năm 2001.

0

này dường như là một điều không minh bạch với thực hiện của Chrome của parse.date như bạn có thể xem tại đây:

http://jsfiddle.net/feZ9P/1/

"something.com" is false 
"something.com is invalid" is false 
"something.com eq phone" is false 
"something.com eq phone 1" is true 
"something.com eq phone 5" is true 
"anything that has one at the end 1" is true 
"as long as 1 isn't earlier in the string 1" is false 

Nó dường như chỉ xảy ra nếu có một số lượng kèm theo ở phần cuối của chuỗi, nếu không có lỗi này không dường như xảy ra.

Các vấn đề liên quan