2013-03-08 7 views
6

Sto usando un metodo per controllare se una data è valido o meno nella mia applicazionemetodo Javascript Date.parse non funziona correttamente

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

Funziona correttamente nella maggior parte dei casi, ma quando entro in valore come "something.com Eq Phone 1" Data. parse restituisce 978300000000 e il metodo restituito true

come l'ha analizzato come una data effettiva?

risposta

3

Questo comportamento non era coerente tra i browser. In IE9 e Firefox, Nan stato correttamente restituito, ma in Chrome, sembrava pensare something.com Eq Phone 1 era il 1 ° gennaio 2001.

non ho usato questa libreria me stesso, ma perché non controllare DateJS? Ho copiato in something.com Eq Phone 1 nella loro demo e non ha prodotto una data valida.

Edit:

Quanto al perché questo sta accadendo, guardando il date parsing source code da cromo, possiamo vedere questi commenti:

Qualsiasi parola non riconosciuta prima che il primo numero viene ignorato.

E

MM e DD default è 01, se mancanti

millimetri, ss, e di default sss a 00 se mancante

il che spiegherebbe perché è riuscita a convertire (essenzialmente) il numero 1 in una data valida.

Edit 2:

Quindi, per chiarire, il numero in something.com Eq Phone 1 sembra indicare il mese. Per esempio, la modifica del 1 ad un 3 dà il 1 ° marzo 2001.

A questo punto non riesco a trovare alcuna prova concreta che l'anno di default al 2001.

0

Questo sembra essere un capriccio con l'attuazione di Chrome di parse.date come potete vedere qui:

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 

Mi sembra che si verifichi se c'è un numero attaccato alla fine della stringa, se non c'è questo errore non sembra accadere.