2010-07-27 65 views
2

我有下面的代碼,它應該試圖解析給定的日期。如果失敗,則默認爲當前日期:如何檢查新日期(「某日期」)是否能夠正確解析?

var date = new Date(textbox.value); // Try to parse 
if (isNaN(date)) date = new Date(); // Default to current 

現在,我使用isNaN()來測試是否能正確解析,如檢查新的Date()沒有返回「無效日期'。

這似乎在IE,FF和Chrome上運行正常,但不適用於Safari瀏覽器。例如,如果它試圖解析日期的空字符串,有時它認爲它是1970年,有時它認爲這是一個無效的日期。下面是從Safari瀏覽器JS控制檯exerpt:

a=new Date("") <-- This thinks it's 1970 for some reason 
Thu Jan 01 1970 11:00:00 GMT+1100 (AUS Eastern Daylight Time) 

b=new Date("abc") <-- Fails of course, which is good 
Invalid Date 

c=new Date("") <-- Why does this fail now, whereas it thought it was 1970 before? 
Invalid Date 

isNaN(a) <-- Why is it successfully parsing an empty string for a date? 
false 

isNaN(b) <-- Fair enough 
true 

isNaN(c) <-- This is what i'd expect, but why is it different now? 
true 

不知道發生了什麼在這裏,非常感謝

回答

4

Safari瀏覽器是什麼?不會發生在我身上:

> a= new Date('') 
Invalid Date 
> isNaN(a) 
true 

在Safari 4.0(任一操作系統)上。

一般來說,儘管解析在傳統上很大程度上沒有指定,並且完全不可靠。您不希望依賴它來獲取用戶輸入值,因爲它會在瀏覽器,平臺和區域設置中顯示不一致且通常不合適的行爲。編寫自己的解析器通常會更好(或者使用現有的日期庫之一,例如fleegix)。

+0

我在WinXP上使用Safari 5。是的,它是由代碼生成的解析日期,而不是由用戶生成的,所以我並不擔心這一方面。 – Chris 2010-07-27 01:59:26

+0

我最終改變了我的代碼,所以如果它是一個空字符串,假設它是一個無效的日期(以及isNaN測試) – Chris 2010-07-27 05:09:14

+0

啊,你是對的,這只是在Safari 5中的新行爲。多麼奇怪......好吧,這只是另一個瑕疵添加到日期解析奇怪的長列表。手動檢查肯定是要求的。 – bobince 2010-07-27 10:30:54