Javascript extjs datecolumn显示休息一天的日期
我有一个带有日期列的Ext.grid。一切都很顺利,只是日期是休息一天 我发现,当我将数据添加到网格存储时,值为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
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”不起作用。