2010-10-29 73 views
3

我想一個日期字符串轉換爲jQuery的日期對象,下面的代碼工作正常,Chrome和Firefox,但不是在Internet Explorer中:在jQuery和Internet Explorer中將字符串轉換爲日期?

<script type="text/javascript" charset="utf-8"> 
//Validate if the followup date is now or passed: 
    jQuery.noConflict(); 
    var now = new Date(); 
    jQuery(".FollowUpDate").each(function() { 
     if (jQuery(this).text().trim() != "") { 
      var followupDate = new Date(jQuery(this).text().trim()); //Here's the problem 
      alert(followupDate); 
      if (followupDate <= now) { 
       jQuery(this).removeClass('current'); 
       jQuery(this).addClass('late'); 
      } 
      else { 
       jQuery(this).removeClass('late'); 
       jQuery(this).addClass('current'); 
      } 
     } 
    }); 
</script> 

警報是唯一沒有進行測試,並在Chrome和Firefox它返回一個日期對象,但在IE中我得到了NaN。

怎麼回事,我該如何做這個轉換,以便它能在IE中工作?

回答

6

這個問題幫助我找出了一個解決方案,我有轉換日期的問題。我找到了一種轉換日期而不使用單獨腳本或測試瀏覽器類型的方法。

下面的代碼接受格式爲2011-01-01(年,月,日)的日期。

function convertDate(stringdate) 
{ 
    // Internet Explorer does not like dashes in dates when converting, 
    // so lets use a regular expression to get the year, month, and day 
    var DateRegex = /([^-]*)-([^-]*)-([^-]*)/; 
    var DateRegexResult = stringdate.match(DateRegex); 
    var DateResult; 
    var StringDateResult = ""; 

    // try creating a new date in a format that both Firefox and Internet Explorer understand 
    try 
    { 
     DateResult = new Date(DateRegexResult[2]+"/"+DateRegexResult[3]+"/"+DateRegexResult[1]); 
    } 
    // if there is an error, catch it and try to set the date result using a simple conversion 
    catch(err) 
    { 
     DateResult = new Date(stringdate); 
    } 

    // format the date properly for viewing 
    StringDateResult = (DateResult.getMonth()+1)+"/"+(DateResult.getDate()+1)+"/"+(DateResult.getFullYear()); 

    return StringDateResult; 
} 

希望有所幫助!

+0

這是一種到現在爲止,我已經開始了:-)但無論如何,我會在某個時候嘗試一下! – Anders 2011-02-16 07:20:46

+0

這基本上工作。現在讓我們說,我有兩個增值稅從這個返回的值....可以從彼此扣除? – WilfredMifsud 2012-01-25 14:20:54

+0

如果它們由此函數返回,則它們可能無法相互扣除,因爲該函數返回一個字符串。我建議在調用這個函數前在日期做任何數學運算。 – 2012-01-25 14:26:16

1

如果它看起來像日期的字符串,請使用它。

var followupDate = new Date(Date.Parse(jQuery(this).text().trim())); 

我想我應該問的一個問題是,什麼是

jQuery(this).text().trim() 

輸出?

+0

不幸的是,這給了我完全相同的結果(NAN)。 jQuery(this).text()。trim()的輸出是表格單元格的內容,它是瑞典日期格式(「2010-10-30」)中的日期字符串。火狐和鉻沒有問題,並立即把它變成一個日期對象,但IE似乎並沒有認出它或什麼... – Anders 2010-10-30 09:56:54

1

我想通了:IE瀏覽器顯然沒有接受瑞典的日期格式,所以我做了一個字符串替換爲一種格式它確實接受:

VAR followupDate =新的日期(datestring.replace(「 - 」, '/'));

不幸的是,這種格式未被Firefox接受,因此我必須保留Chrome和Firefox的原始代碼,然後使用單獨的帶有條件註釋的IE腳本。

+0

或使用isNan(日期)條件分開ie /其他瀏覽器 – 2011-04-18 07:23:12

1

我沒有測試過這一點,但如何:

var followupdate = new Date(jQuery(this).text().trim().toString()); 

的「toString()」應該強迫它被解釋爲一個字符串; Date對象應該接受這個字符串作爲有效的輸入,並且可能會阻止IE向上拋出。

0

我用像這樣的時刻:

new Date(moment(item.ToDate)); 

廠與瑞典的日期,以及 '2013年1月5日':

new Date(moment('2013-01-05'));