ExtJS:以单独格式提交日期

时间:2012-02-04 09:12:17

标签: extjs extjs4

我正在使用ExtJS v4.0。

维护客户端和服务器端之间的日期格式确实令人困惑。

用户需要自己的输入格式,但服务器通常要求提交为一种标准格式。

它应该是ExtJS中内置的实现,但事实并非如此。

我已经阅读了一些有关此问题的解决方案,但他们只尝试解决DateField格式化问题(通过创建特殊的DateField插件或扩展SubmitAction)。

我正在寻找一个全球解决方案来格式化所有可以提交的日期(网格/商店编写者,表单/日期字段等)。

因此,日期可能会根据区域设置自定义显示格式,但它们将以一种标准格式提交(例如yyyy-mm-dd)。

对此问题的任何建议?

非常感谢。

2 个答案:

答案 0 :(得分:1)

这是我在使用4.2.1版本的文档中找到的唯一可行答案

    Ext.Date.patterns = {
    ISO8601Long:"Y-m-d H:i:s",
    ISO8601Short:"Y-m-d",
    ShortDate: "n/j/Y",
    LongDate: "l, F d, Y",
    FullDateTime: "l, F d, Y g:i:s A",
    MonthDay: "F d",
    ShortTime: "g:i A",
    LongTime: "g:i:s A",
    SortableDateTime: "Y-m-d\\TH:i:s",
    UniversalSortableDateTime: "Y-m-d H:i:sO",
    YearMonth: "F, Y"
};


//allow max date as today
Ext.override(Ext.form.DateField, {
    submitFormat:Ext.Date.patterns.ISO8601Short
});

答案 1 :(得分:0)

我不知道任何通用的,在你的代码中执行一次,解决这个问题。但是你可以编写一个迭代模式对象的函数。有点像谈论at the end of the Ext.Date object intro in the docs。您肯定必须添加更多模式,您必须在您想要的地方单独实现它,例如:对于商店编写者,您可以在beforesync事件中使用它,但对于日期字段,您可以将其作为验证器函数。我在不同的地方使用了这样的函数,因此用户不会被绑定到特定的日期模式,函数:

function reallyParse(aDate) {
    Ext.Array.each(Ext.Date.patterns, function(pattern) {
        aDate = Ext.Date.parse(aDate, pattern)
        return aDate === null;
    });
    if (myDate !== null) {
        return false
    } else {
        // format it the way your server wants it
        return Ext.Date.format(myDate, Ext.Date.patterns.ISO8601Long)
    }
}

我所说的文档的具体引用是:

  

以下是您可能会发现有用的一些标准日期/时间模式。   它们不是Ext.Date源代码的一部分,但你可以使用它们   只需将此代码块复制到之后包含的任何脚本中即可   Ext.Date和它们也将在日期全球上市   宾语。您可以根据需要在代码中添加或删除模式。

Ext.Date.patterns = {
    ISO8601Long:"Y-m-d H:i:s",
    ISO8601Short:"Y-m-d",
    ShortDate: "n/j/Y",
    LongDate: "l, F d, Y",
    FullDateTime: "l, F d, Y g:i:s A",
    MonthDay: "F d",
    ShortTime: "g:i A",
    LongTime: "g:i:s A",
    SortableDateTime: "Y-m-d\\TH:i:s",
    UniversalSortableDateTime: "Y-m-d H:i:sO",
    YearMonth: "F, Y"
};
     

使用示例:

var dt = new Date();
console.log(Ext.Date.format(dt, Ext.Date.patterns.ShortDate));
     

开发人员编写的自定义格式可以通过提供两者来使用   格式化和解析功能,执行专业   要求。这些函数存储在parseFunctions和   formatFunctions。

就像我说的那样,你必须添加他们的模式对象,实现会因你使用它的位置而有所不同,但这就是我的工作方式。