javascript - extjs datecolumn 显示休息一天的日期

标签 javascript date grid extjs4.1 utc

我有一个带有日期列的 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) 如果我将 datecolumndatefield 的编辑器一起使用,并且商店模型中的字段是 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/

相关文章:

javascript - 如何通过单击按钮将表单发布到两个不同的页面?

javascript - 为什么我在 Angular JS 中得到两个方法调用?

java - 线程是否足够可靠以计算秒数?

java - Android 游戏 - 尝试创建数组失败?

grid - 如何减少基础网格中项目之间的空间?

hadoop - PIG - 将字符串连接到参数?

javascript - 在构建 bundle 时如何删除未使用的代码?

javascript - JavaScript 的日期是如何工作的?

python - 更改文件创建日期

javascript - 使用循环定义变量值JS