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) 如果我使用datecolumndatefield 的编辑器,并且商店模型中的字段是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 显示休息一天的日期的主要内容,如果未能解决你的问题,请参考以下文章

转载:IT人高效的休息方式

一个月工资7500左右,一月休息一天,这样的工资怎么样?

一个二线城市程序员-周末一天的生活

CF Gym-101911A Coffee Break

Extjs GridPanel 验证

JQuery完整日历,如何更改视图