2012-08-27 37 views
1

我在建模爲的jqGrid具有列如下:從JSON的jqGrid日期格式生成錯誤AM/PM

colModel: [ 
      ... 
      { name: 'TranDate', index: 'TranDate', search: false, width: 150, 
      sorttype: 'date', formatter: 'date', 
      formatoptions: { srcformat: 'Y-m-d H:i:s A', newformat: 'd-M-Y h.i A'} }, 
     ... 
     ], 

返回的數據的格式如下2012-07-06 3:25:19 PM但是當顯示在使用上述格式的網格,它將PM切換爲AM,除了12:0112-59之間的時間。

此問題與AM/PM date formatting in jqGrid類似,但即使進行修改後,問題仍然存在。

我在想什麼或做錯了什麼?

回答

0

的問題是,在jquery.fmatter.js的DateFormat功能不支持AM/PM在srcformat

// Tony Tomov 
    // PHP implementation. Sorry not all options are supported. 
    // Feel free to add them if you want 
    DateFormat : function (format, date, newformat, opts) { 

具體來說,你可以看到下面有對A選項不支持在解析時給定日期:

 } else { 
      date = String(date).split(/[\\\/:_;.,\t\T\s-]/); 
      format = format.split(/[\\\/:_;.,\t\T\s-]/); 
      // parsing for month names 
      for(k=0,hl=format.length;k<hl;k++){ 
       if(format[k] == 'M') { 
        dM = $.inArray(date[k],dateFormat.i18n.monthNames); 
        if(dM !== -1 && dM < 12){date[k] = dM+1;} 
       } 
       if(format[k] == 'F') { 
        dM = $.inArray(date[k],dateFormat.i18n.monthNames); 
        if(dM !== -1 && dM > 11){date[k] = dM+1-12;} 
       } 
       if(date[k]) { 
        ts[format[k].toLowerCase()] = parseInt(date[k],10); 
       } 
      } 
      if(ts.f) {ts.m = ts.f;} 
      if(ts.m === 0 && ts.y === 0 && ts.d === 0) { 
       return "&#160;" ; 
      } 
      ts.m = parseInt(ts.m,10)-1; 
      var ty = ts.y; 
      if (ty >= 70 && ty <= 99) {ts.y = 1900+ts.y;} 
      else if (ty >=0 && ty <=69) {ts.y= 2000+ts.y;} 
      timestamp = new Date(ts.y, ts.m, ts.d, ts.h, ts.i, ts.s, ts.u); 
     } 

您有幾個選項。如果您可以修改Web服務,則可以讓它以不同格式(例如unix時間戳)返回日期,或者讓它以受支持的格式返回新的日期列。或者,您可以將此報告爲jqGrid錯誤並/或修復此代碼段以支持AM/PM說明符。

+0

您的鏈接已經讓人大開眼界,併爲此感謝。我發現第一個選項更容易實現,並從服務器返回所需的格式。只要有解決方法,我認爲打開錯誤報告並不重要。再次閱讀鏈接上的開場白評論可能有一個理由不嘗試和實施任何可以想象的選項或格式。 – kagundajm

0

它是這樣做的原因,因爲它假設你的時間爲24小時制。你的代碼應該修復它,但我找不到它有什麼問題。

但是,在這裏,這將修復它爲您

只需更換這

formatter: 'date', formatoptions: { srcformat: 'Y-m-d H:i:s A', newformat: 'd-M-Y h.i A'} }, 

與此

datefmt: "Y-m-d h:i A" 

在這裏,你將無法改變 'YMD' 到「DM- Y」。

+0

替換爲'datefmt:「m/d/Y h:i A」'顯示數據,就像返回的JSON格式一樣('2012-07-06 3:25:19 PM')。我想要的是顯示爲「06-Jul-2012 3.25 PM」。 – kagundajm

+0

如果你可以在24小時內從服務器發送數據的時間比你以前的代碼將修復AM/PM問題 –

+0

我發現從服務器端格式化日期更容易。這樣,我只需要以我需要的格式格式化一次,避免在顯示網格時再次指定格式。 – kagundajm