2013-04-25 70 views
2

我有一個帶有日期列的Ext.grid。一切正常,除了日期是休息一天。extjs datecolumn顯示一天的日期

我發現,當我將數據添加到網格的商店時,值爲2013-03-31。後來,當我看商店的數據時,數值爲Sat Mar 30 2013 17:00:00 GMT-0700 (US Mountain Standard Time)

顯然,這是一個時區問題,但我不知道如何解決它。

這裏就是我的數據添加到網格中的商店

for (var i = 0; i < dateboxes.length; i++) 
{ 
    dateboxGrid.store.add(dateboxes[i]); 
    //dateboxes[i].Value contains the date in this form: "2013-03-31" 
} 
console.log(dateboxGrid.getStore()) //logs "Sat Mar 30 2013 17:00:00 GMT-0700 (US Mountain Standard Time)" 

我需要做什麼之前,我將它添加到店,以確保預期的日期顯示在列做dateboxes[i].Value代碼?

更新
我做了以下更改。當我將日期保存到數據庫時,我首先在數據上調用.toISOString()。現在,當數據從數據庫加載到商店中時,它將作爲GMT +0700加載,並且日期在加載到該字段時看起來正確。
但是......恐怕這意味着它會在不同的時區出現錯誤。

我想要的全部是日期。我甚至不想記錄時間。這在我的申請中沒有意義。

+0

我不知道很多關於ExtJS的,但我會嘗試的日期之後加入「Z」,所以,這將是其形式爲「2013- 03-31Z」。這應該導致時間被保存而沒有任何時區偏移量。參見[ISO 8601](http://en.wikipedia.org/wiki/ISO_8601#UTC)。 – 2013-04-25 21:21:40

+0

在日期的末尾添加「Z」不起作用。 – user1304444 2013-04-25 21:26:20

回答

1

當我與此合作時,我發現我必須克服一個問題或其他問題。 (1)如果我使用datecolumn,編輯器爲datefield,並且商店模型中的字段爲type: 'date',那麼這些值將作爲日期(包括時間)存儲在數據庫中。當我試圖檢索日期時,那麼時區的東西會踢進去,並改變加載的日期。

(2)如果我沒有使用datecolumn和實體店的模式設置爲type: 'date'然後日期並沒有顯示在單元格向上。儘管它們會以簡單的字符串形式存儲,但它們並沒有在網格中正確顯示。

這是我來到: 我使用的選項(1),但前門店的數據被髮送到數據庫中,我這樣做:

for (var i = 0; i < dateboxes.length; i++) { 
     if (dateboxes[i].Value != null) { 
      var date = new Date(dateboxes[i].Value); 
      dateboxes[i].Value = String(date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate()); 
     } 
    } 

這基本上只是改變日期爲一個字符串。現在數據作爲一個簡單的字符串存儲在數據庫中。當它顯示在網格中時,沒有時區信息可以搞砸了。代碼`(date.getMonth()+1)'在那裏,因爲month是基於0的。

當我回過頭來看答案時,有些事情沒有意義。我一定也換了別的東西。無論哪種方式......它現在起作用。

我會將問題留給其他人更好地解釋發生了什麼。

0

我不認爲這與時間戳有關。查看encodeDate的源代碼...它看起來像ExtJS增加了月份,但不是一天。我猜這是他們的嘗試。我周圍有在我的JavaScript覆蓋encodeDate:

var fFbegin_settle_date = new Date(); 

Ext.util.JSON.encodeDate = function(fFbegin_settle_date) { 
    //didn't work: return fFdateBegin.format('"Y-m-d"'); 
    pad = function(n) { 
     return n < 10 ? "0" + n : n; 
    } 
    return '"' + fFdateBegin.getFullYear() + "-" + 
    pad(fFdateBegin.getMonth()+1) + "-" + 
    pad(fFdateBegin.getDate()+1) + '"'; 
};