IE 日期構造函數回傳NaN:跨瀏覽器日期轉換解決方案
在JavaScript 日期操作領域,出現了一個特殊問題Internet Explorer (IE) 中Date 建構子的行為與Firefox 和Chrome 中的同級建構子不同。當嘗試從字串建立新的 Date 物件時,IE 傳回 NaN(不是數字),而其他瀏覽器產生有效日期。
要理解這種差異,我們需要深入研究所使用的底層解析器機制由每個瀏覽器。在 IE 中,Date 建構函式難以處理某些日期格式,特別是那些包含逗號作為分隔符號的日期格式。
以下是開發人員嘗試建立日曆時遇到的特定範例:
<code class="javascript">function buildWeek(dateText){ var headerDates=''; var newDate = new Date(dateText); for(var d=0;d<7;d++){ headerDates += '<th>' + newDate + '</th>'; newDate.setDate(newDate.getDate()+1); } jQuery('div#headerDates').html('<table><tr>'+headerDates+'</tr></table>'); }</code>
在此函數中,dateText 參數表示本週的星期一,格式為「m, d , Y”(例如“02, 01, 2010”)。雖然這種格式在 Firefox 和 Chrome 中無縫運行,但在 IE 中帶來了挑戰,因為 IE 無法正確解析逗號分隔值。
要解決此問題,我們可以使用更一致且跨瀏覽器相容的格式日期格式。其中一種方法是將逗號分隔的字串轉換為離散值數組,然後可以使用該數組建立有效的Date 物件:
<code class="javascript">var dateStr="2011-08-03 09:15:11"; //returned from mysql timestamp/datetime field var a=dateStr.split(" "); var d=a[0].split("-"); var t=a[1].split(":"); var date = new Date(d[0],(d[1]-1),d[2],t[0],t[1],t[2]);</code>
在此範例中,dateStr 變數表示日期和從MySQL 資料庫檢索的時間,格式為「YYYY-MM-DD HH:MM:SS」。透過將此字串拆分為其組成部分並將它們單獨傳遞給 Date 建構函數,我們確保跨瀏覽器一致地處理轉換。
此解決方案解決了跨瀏覽器日期解析差異,並使 buildWeek 函數能夠在所有主要瀏覽器中無縫工作,包括 Internet Explorer。
以上是IE 的日期建構函式是否會導致跨瀏覽器日期轉換出現 NaN 錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!