ExtJS:以单独的格式提交日期
我正在使用extjsv4.0 在客户端和服务器端之间维护日期格式确实令人困惑 用户需要自己的输入格式,但服务器通常要求提交为一种标准格式 它应该是ExtJS中的内置实现,但事实并非如此 我读过一些关于这个问题的解决方案,但它们只尝试解决日期字段格式问题(通过创建特殊的日期字段插件或扩展SubmitAction) 我正在寻找一个全球性的解决方案来格式化所有可以提交的日期(网格/商店编写器、表单/日期字段等) 因此,根据区域设置,日期可能具有自定义的显示格式,但它们将以一种标准格式(例如yyyy-mm-dd)提交 对这个问题有什么建议吗ExtJS:以单独的格式提交日期,extjs,extjs4,Extjs,Extjs4,我正在使用extjsv4.0 在客户端和服务器端之间维护日期格式确实令人困惑 用户需要自己的输入格式,但服务器通常要求提交为一种标准格式 它应该是ExtJS中的内置实现,但事实并非如此 我读过一些关于这个问题的解决方案,但它们只尝试解决日期字段格式问题(通过创建特殊的日期字段插件或扩展SubmitAction) 我正在寻找一个全球性的解决方案来格式化所有可以提交的日期(网格/商店编写器、表单/日期字段等) 因此,根据区域设置,日期可能具有自定义的显示格式,但它们将以一种标准格式(例如yyyy-m
非常感谢。我不知道任何通用的、在代码中实现一次的解决方案。但是您可以编写一个函数,该函数将遍历patterns对象。有点像它所说的。您肯定需要添加更多的模式,并且必须在需要的地方单独实现它,例如:对于商店编写器,您可以在
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.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和
格式化函数
正如我所说,您必须添加到他们的patterns对象中,并且实现将根据您使用它的位置而有所不同,但我就是这样做的。这是我从使用版本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
});
链接到您发现的位置会很有帮助。抱歉,这里是文档链接。请注意,这是一种危险的方法,将在整个应用程序的所有日期字段中生效