extjs datecolumn 显示休息一天的日期
Posted
技术标签:
【中文标题】extjs datecolumn 显示休息一天的日期【英文标题】:extjs datecolumn shows date one day off 【发布时间】:2013-04-25 21:14:51 【问题描述】:我有一个带有日期列的 Ext.grid。一切正常,除了日期是休息一天。
我发现当我将数据添加到网格的存储中时,值为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
,并且当它加载到字段中时日期看起来是正确的。
但是......我担心这意味着它会在不同时区的人身上显示错误。
我想要的只是一个日期。我什至不想记录时间。这在我的应用程序中毫无意义。
【问题讨论】:
我对 extjs 了解不多,但我会尝试在日期后添加一个“Z”,以便它的形式为“2013-03-31Z”。这应该会导致在没有任何时区偏移的情况下保存时间。见ISO 8601。 在日期末尾添加“Z”无效。 【参考方案1】:在处理这个问题时,我发现我要么必须克服一个问题,要么必须克服另一个问题。
(1) 如果我使用datecolumn
和datefield
的编辑器,并且商店模型中的字段是type: 'date'
,那么这些值将作为日期(包括时间)存储在数据库中。当我尝试检索日期时,Timezone 会启动并更改加载的日期。
或
(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)' 在那里,因为月份是从 0 开始的。
当我回顾答案时,有些事情没有意义。我一定也改变了别的东西。无论哪种方式...现在都可以使用。
我会把这个问题留给其他人更好地解释发生了什么。
【讨论】:
【参考方案2】:我认为这与时间戳无关。查看 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) + '"';
;
【讨论】:
以上是关于extjs datecolumn 显示休息一天的日期的主要内容,如果未能解决你的问题,请参考以下文章