RELATEED CONSULTING
相關咨詢
選擇下列産品馬上(shàng)在線溝通(tōng)
服務時(shí)間(jiān):9:00-18:00
你(nǐ)可(kě)能遇到了下面的問題
關閉右側工具欄
datepicker獲取選中日期并格式化輸出,在IE中輸出NaN,在火(huǒ)狐和(hé)谷歌(gē)浏覽器(qì)中正常
  • 作(zuò)者:admin
  • 發表時(shí)間(jiān):2013-07-02 14:17:21
  • 來(lái)源:未知

今天在工作(zuò)中遇到這樣一個(gè)問題:使用jquery ui的datepicker日曆控件,獲取選中的日期,并且要将日期轉換成日期對象格式,如:Tue Nov 30 00:00:00 UTC+0800 2010,以便與其他代碼對接。

我的代碼如下:

$("#mydate").datepicker({
		showOn: "button",
		buttonImage: "images/calendar.gif",
		buttonImageOnly: true,
		buttonText:"日曆",
		onSelect:function(dateText,inst){
				alert(dateText);
                r = new Date(dateText);
                alert(r);
                ...do something...
        }
}

我要實現的效果是:當點擊日曆控件,選中日期時(shí),獲取當前日期,并轉換日期格式賦值給變量r,用于後面更複雜的工作(zuò)。

我們知道(dào),jaascript用來(lái)創建一個(gè)日期對象,返回當前的日期和(hé)時(shí)間(jiān),直接使用new Date,如:

var date = new Date();
alert(date);

輸出的是當前日期和(hé)時(shí)間(jiān),格式為(wèi):Tue Nov 30 00:00:00 UTC+0800 2010。直接可(kě)以使用在項目中,而且在IE和(hé)火(huǒ)狐上(shàng)都正常。

可(kě)是,如果是new Date()接收外部傳來(lái)的參數(shù)如我使用datepicker中用到new Date(dateText)。這個(gè)時(shí)候用火(huǒ)狐和(hé)谷歌(gē)浏覽器(qì)測試,能正常輸出日期格式為(wèi):Tue Nov 30 00:00:00 UTC+0800 2010。但(dàn)是在IE7上(shàng)就杯具了,IE7輸出的結果為(wèi):NaN。

郁悶了一陣子,試過很(hěn)多(duō)方法,最後不得(de)不放棄new Date()這個(gè)原始的方法,從http://jibbering.com/faq/#parseDate找到了一個(gè)轉換函數(shù),代碼如下:

//轉換日期格式
function parseISO8601(dateStringInRange) {
    var isoExp = /^s*(d{4})-(dd)-(dd)s*$/,
        date = new Date(NaN), month,
        parts = isoExp.exec(dateStringInRange);

    if(parts) {
      month = +parts[2];
      date.setFullYear(parts[1], month - 1, parts[3]);
      if(month != date.getMonth() + 1) {
        date.setTime(NaN);
      }
    }
    return date;
}

不難看出,代碼能将格式為(wèi)“2010-11-26”的日期轉換為(wèi):“Fri Nov 26 00:00:00 UTC+0800 2010 ”的格式。于是,在我的代碼中直接調用這個(gè)函數(shù)處理(lǐ)下就OK。最終代碼:

$("#mydate").datepicker({
		showOn: "button",
		buttonImage: "images/calendar.gif",
		buttonImageOnly: true,
		buttonText:"日曆",
		onSelect:function(dateText,inst){
				alert(dateText);
                var r = parseISO8601(dateText); //轉換格式
                alert(r);
                ...do something...
        }
}