2013-07-10 76 views
0

我有這個很簡單的功能,這並不在Firefox或IE瀏覽器的工作。只是想知道你是否有一些洞察力。的JavaScript在IE和Firefox

function compareDates(obj, fecha){ 
    var date1 = new Date(Date.parse(obj.value.replace(/-/g, " "))); 
    var date2 = new Date(Date.parse(fecha.value.replace(/-/g, " "))); 

    if(date1 < date2){ 
     alert("Invalid Date"); 
    } 
} 

該函數接收一個10-JUL-1320-JUL-13,爲例子。

在IE中,我沒有得到警告,在Chrome中,我得到了警報。請參閱http://jsfiddle.net/ZDtVv/

+2

它不會在任何地方工作,因爲比較兩個不同的對象將永遠不會返回true,即使內容是一樣的。 – adeneo

+0

當你說「不工作」時,你是什麼意思?怎麼了?有關更多信息,請參閱http://stackoverflow.com/questions/492994/compare-dates-with-javascript。 – EricLaw

+0

@adeneo * Date *實例可以用'<'' –

回答

1

Date.parse需要一個ISO日期,這就需要整整一年。 Chrome和Firefox試圖爲你弄明白,你不應該依賴這一點。

// This works 
compareDates({value: '10-JUL-2013'}, {value: '20-JUL-2013'}) 

http://jsfiddle.net/ZDtVv/1/

0

這些日期字符串是無效的日期字符串,這樣你就得到有作爲的NaN自己的實際時間戳Date對象。並NaN < NaN測試錯誤。

每規範,無效的日期字符串行爲是不確定的;一個JavaScript實現可以將它們轉換爲NaN,或者使用任何想要解析它們的啓發式。例如,這些日期可能是13年,1913年或1413年,這些都是每個規範的有效行爲。

+0

比較時,JS總是調用'valueOf'但它適用於Chrome,這就是問題所在,爲什麼? –

+1

因爲規範說你基本上可以做任何你想做的無效日期字符串和日期解析庫Chrome使用正好做這些特定字符串的東西。不能保證它會繼續在Chrome中工作。 –

相關問題