我有一个带有日期列的 Ext.grid。一切正常,除了日期是休息一天。
我发现当我将数据添加到网格的存储中时,值为 2013-03-31
。后来,当我查看商店的数据时,值为 Sat Mar 30 2013 17:00:00 GMT-0700(美国山区标准时间)
显然,这是一个时区问题,但我不知道如何解决。
这是我将数据添加到网格存储的代码
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
,加载到字段中时日期看起来是正确的。
但是...恐怕这意味着对于不同时区的人来说它会显示错误。
我想要的只是一个约会对象。我什至不想记录时间。这在我的应用程序中毫无意义。
最佳答案
当我处理这个问题时,我发现我要么必须克服一个问题,要么克服另一个问题。
(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)”在那里,因为月份是基于 0 的。
当我回顾答案时,有些事情没有意义。我一定也改变了别的东西。无论哪种方式......它现在都有效。
我会将问题留给其他人更好地解释发生了什么。
关于javascript - extjs datecolumn 显示休息一天的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16224862/