Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript extjs datecolumn显示休息一天的日期_Javascript_Date_Grid_Extjs4.1_Utc - Fatal编程技术网

Javascript extjs datecolumn显示休息一天的日期

Javascript extjs datecolumn显示休息一天的日期,javascript,date,grid,extjs4.1,utc,Javascript,Date,Grid,Extjs4.1,Utc,我有一个带有日期列的Ext.grid。一切都很顺利,只是日期是休息一天 我发现,当我将数据添加到网格存储时,值为2013-03-31。稍后,当我查看商店的数据时,该值是2013年3月30日星期六17:00:00 GMT-0700(美国山区标准时间) 显然,这是一个时区问题,但我不知道如何解决它 下面是我将数据添加到网格存储的代码 for (var i = 0; i < dateboxes.length; i++) { dateboxGrid.store.add(dateboxes

我有一个带有日期列的Ext.grid。一切都很顺利,只是日期是休息一天

我发现,当我将数据添加到网格存储时,值为
2013-03-31
。稍后,当我查看商店的数据时,该值是2013年3月30日星期六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)"
for(var i=0;i
在将日期框[I].Value添加到存储区之前,我需要对其执行什么操作,以确保在列中显示预期的日期

更新
我做了如下改变。当我将日期保存到数据库时,我首先对数据调用
.toISOString()
。现在,当数据从数据库加载到存储中时,它被加载为
GMT+0700
,当数据加载到字段中时,日期看起来是正确的。
然而,我担心这意味着它会在不同时区的人身上出现错误


我只想要一个约会。我甚至不想记录时间。这在我的应用程序中毫无意义。

当我处理这个问题时,我发现我要么必须克服一个问题,要么必须克服另一个问题

(1) 如果我使用
datecolumn
datefield
编辑器,并且商店模型中的字段是
类型:“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());
        }
    }
for(var i=0;i
这基本上只是将日期更改为字符串。现在,数据以简单字符串的形式存储在数据库中。当它显示在网格中时,没有时区信息会把它弄乱。代码“(date.getMonth()+1)”就在那里,因为月份是基于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) + '"';
};
var fFbegin\u solate\u date=新日期();
Ext.util.JSON.encodeDate=函数(fFbegin\u settle\u date){
//不起作用:返回fFdateBegin.format(“'Y-m-d');
pad=功能(n){
返回n<10?“0”+n:n;
}
返回'''+fFdateBegin.getFullYear()+“-”+
pad(fFdateBegin.getMonth()+1)+“-”+
pad(fFdateBegin.getDate()+1)+'”;
};

我对extjs了解不多,但我会尝试在日期后添加一个“Z”,这样它的格式就会是“2013-03-31Z”。这将导致节省时间而不产生任何时区偏移。请参见。在日期末尾添加“Z”不起作用。