2010-10-30 28 views
2

我一直堅持這一段時間,如果可能的話,將不勝感激。將日期傳遞給日期對象導致IE8中的未定義變量

基本上我會以yyyy-mm-dd的格式從API接收日期。除其他外,我希望顯示週日。這裏是相關的代碼:

// jsonDate is in the format yyyy-mm-dd 

var splitDate = jsonDate.split("-"); 
var joinedDate = splitDate.join(",");  

var myDate = new Date(joinedDate); 

var weekday=new Array(7); 
weekday[0]="Sun"; 
weekday[1]="Mon"; 
weekday[2]="Tue"; 
weekday[3]="Wed"; 
weekday[4]="Thu"; 
weekday[5]="Fri"; 
weekday[6]="Sat"; 

var dayOfTheWeek = weekday[myDate.getDay()]; 

一切工作,因爲它應該在Firefox,但在IE8「dayOfTheWeek」是未定義的。 IE控制檯工具還會在控制檯登錄時顯示「myDate」爲「NaN」。

任何幫助將非常感激。

回答

3

創建日期這樣:

var myDate = new Date(splitDate[0],splitDate[1]-1,splitDate[2]); 

日期預計,部分單參數,而不是作爲一個格式化字符串。

還有傳遞一個字符串,例如一個選項:

MonthAsString Day , year hours:minutes:seconds 

但我認爲你最好不要使用它,它可能會依賴於JavaScript的版本,格式將被接受。

+1

由於格式是知道的,我太會用'新的日期(年,月,1天)'。但是參數可以是一個字符串:ECMA-262,15.9.3:'new Date([string | number | [year [,month [,date [,hours [,minutes [,seconds [,ms]]]]] ]]])'。如果該值是一個字符串,它將被解析爲'Date.parse(value)',它接受幾種不同的格式,但標準允許實現特定的啓發式來確定格式。 FF,Chrome,Opera,但IE不接受'YYYY-MM-DD'(國際)。他們都接受'M/D/YYYY'。 – some 2010-10-30 02:49:11

+0

附加說明:它們都不會在'.toString'上產生相同的結果:FF3.6:'WWW MMM DD YYYY hh:mm:ss GMT + hhmm',Opera10:'WWW,MMM DD YYYY hh:mm:ss GMT + hhmm',Chrome 6:'WWW MMM DD YYYY hh:mm:ss GMT + hhmm(text)',IE8:'WWW MMM D hh:mm:ss UTC + hhmm YYYY'。 – some 2010-10-30 02:54:20

+0

太棒了,非常感謝Dr.Molle。 – Jez 2010-10-30 10:39:38

0
function dstring(str){ 
    //yyyy-mm-dd 
    str= str.split(/\D+/); 
    str[1]-= 1; 
    try{ 
     var d= new Date(); 
     d.setHours(0,0,0,0); 
     d.setFullYear.apply(d, str); 
    } 
    catch(er){ 
     return 'Bad date-'+str; 
    } 
    return d; 
} 

dstring( '2010-10-21')

/* returned value: (Date) 
Thu Oct 21 2010 00:00:00 GMT-0400 (Eastern Daylight Time) 
*/ 
相關問題