2013-03-08 16 views
6

Używam metody, aby sprawdzić, czy data jest ważna, czy nie w mojej aplikacjimetoda JavaScript Date.parse nie działa poprawnie

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

To działa poprawnie w większości przypadków, ale kiedy wprowadzić wartość jak "something.com Eq Phone 1" Data. przetwarza zwraca 978300000000, a metoda zwrócona true

jak to było analizować jako faktyczną datę?

Odpowiedz

3

To zachowanie nie było spójne w różnych przeglądarkach. W IE9 i FireFox, Nan został poprawnie powrócił, ale w Chrome, to wydawało się, że something.com Eq Phone 1 był 1 stycznia 2001 r

ja nie używałem tej biblioteki siebie, ale dlaczego nie sprawdzić DateJS? Skopiowałem w wersji something.com Eq Phone 1 do wersji demo i nie wygenerowałem prawidłowej daty.

Edit:

Jak się dlaczego tak się dzieje, patrząc na date parsing source code z chromu, widzimy te komentarze:

Wszelkie nierozpoznane słowo zanim pierwsza liczba jest ignorowany.

I

MM i DD domyślnie 01, jeśli brakuje

mm, SS, i domyślne SSS do 00, jeśli brakuje

co tłumaczyłoby, dlaczego udało mu się przekształcić (w zasadzie) numer 1 do prawidłowej daty.

Edit 2:

więc wyjaśnienie, numer w something.com Eq Phone 1 wydaje się wskazywać na miesiąc. Na przykład, zmiana 1 do 3 daje 1 marca 2001.

Na tym etapie nie mogę znaleźć żadnych twardych dowodów, że domyślnie do roku 2001.

0

wydaje się być dziwactwo z realizacją Chrome z parse.date jak widać tutaj:

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 

wydaje się tylko wystąpić, jeśli istnieje liczba dołączone na końcu łańcucha, jeśli nie jest to błąd nie wydają się występować.

Powiązane problemy