2014-05-20 47 views
1

日期在数据库中以格式YYYY-mm-dd hh:mm:ss存储。Extjs日期格式问题safari firefox

e.g. 2014-07-03 00:00:00 

但我想我Ext.Field.Date有格式:

Y-m-d H:i 

按我的组件设置:

xtype: 'datefield', 
id: 'p_p_start', 
fieldLabel: 'Planned Start', 
name: 'plannedstart', 
allowBlank: false, 
vtypeText: 'Date not valid', 
format: 'Y-m-d H:i', 

这是很合理的我想能够在除Chrome以外的浏览器中显示日期。迄今为止,FireFox和Safari将不会显示任何内容。

我看了看SO类似的问题,它提出了支持通过拆分所有的浏览器,并重新组装字符串格式的变化:

var c=Ext.getCmp('p_p_start'); 
var st_date = "2014-05-08";// with alt formats changed Y-m-d, leaving time out diags 
var dateParts = st_date.split(/-/); 
var d = new Date(dateParts[0],parseInt(dateParts[1], 10) -1,dateParts[2]); 
console.log("Date parts= " + dateParts);//Date parts= 2014,05,08 
c.setValue( d); //NOPE! 

我很高兴在Chrome进度(没有问题),但尚未成功获得在FF或Safari中的任何工作(未尝试IE,但它也必须在这方面工作)。因此,总之,问题是, 如何在所有浏览器中使用setValue使用格式Y-m-d H:i获取日期格式?

非常感谢提前。

凯文

回答

2

日期字段的内部值是一个JavaScript Date Object,这是不依赖于特定的格式。 format配置只是定义字段的显示和输入格式。

可以使用setValue一个字符串,但只有当字符串已符合您定义的format

在你的情况下,问题似乎是将日期字符串值与不同的格式从服务器/数据库接收到Date对象。

看一看的Ext.Date单,特别是其功能Ext.Date.parse,以实现:

var st_date = "2014-05-08"; 
var dateObj = Ext.Date.parse(st_date, "Y-m-d"); 
Ext.getCmp('p_p_start').setValue(dateObj); 

var st_date2 = "2014-07-03 00:00:00"; 
var dateObj2 = Ext.Date.parse(st_date2, "Y-m-d H:i:s"); 
Ext.getCmp('p_p_start').setValue(dateObj2); 
+0

谢谢马特。它不能解决safari/ff问题,但可以在Chrome中使用。 var dateObj2 = Ext.Date.parse(“2014-05-08 00:00”,“Y-m-d H:i”); console.log(“dateObj =”+ dateObj2); // dateObj = Thu May 08 2014 00:00:00 GMT + 0100(BST) Ext.getCmp('p_p_start')。setValue(dateObj2); 虽然我从中得到了一些很好的建议。将继续尝试。 – KevinY

+0

其实这个代码应该可以在所有主流浏览器上运行,包括Firefox和Safari。看看这个[fiddle](https://fiddle.sencha.com/#fiddle/603),它适用于Chrome,Firefox,Internet Explorer和Safari。顺便说一句,你正在使用哪个ExtJS版本? – matt

+0

它在所有浏览器上的Jsfiddle都能正常工作 - 完全如您所说 - 所以它在我的应用程序中出错。我在4.2.x上使用Sencha Architect 3.0.4.1386 cmd 4.0.4.84。我也更改了jsfiddle上的版本,问题在那里并不明显。再一次,感谢帮助我追踪这种情况的努力。 – KevinY