我正在使用ExtJS v4.0。
维护客户端和服务器端之间的日期格式确实令人困惑。
用户需要自己的输入格式,但服务器通常要求提交为一种标准格式。
它应该是ExtJS中内置的实现,但事实并非如此。
我已经阅读了一些有关此问题的解决方案,但他们只尝试解决DateField格式化问题(通过创建特殊的DateField插件或扩展SubmitAction)。
我正在寻找一个全球解决方案来格式化所有可以提交的日期(网格/商店编写者,表单/日期字段等)。
因此,日期可能会根据区域设置自定义显示格式,但它们将以一种标准格式提交(例如yyyy-mm-dd)。
对此问题的任何建议?
非常感谢。
答案 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。
就像我说的那样,你必须添加他们的模式对象,实现会因你使用它的位置而有所不同,但这就是我的工作方式。