Extjs检索和写入时间戳

时间:2011-12-22 13:23:26

标签: javascript extjs

所以我有一个小的Extjs应用程序,它包含一个用户网格。每个用户都有一个字段,我从服务器发送他订阅的日期作为时间戳值(unix)。

Ext.define('AP.model.User', {
        extend: 'Ext.data.Model',
        fields: [
        { name: 'id', type: 'int', persist : false },
        { name: 'date_added', type: 'date', dateFormat: 'timestamp'},
        { name: 'username', type: 'string', persist : false }
    ]
});

网格有一个渲染器,所以我可以将时间戳渲染成人类可读的格式,例如29-Oct-2011 04:00 am

...
{
    header: 'Date added',
    align: 'center',
    sortable: true,
    dataIndex: 'date_added',
    width: 140,
    fixed: true,
    renderer: Ext.util.Format.dateRenderer('d-M-Y h:i a')
}
...

现在,一切都按预期工作,值正确显示但是,我还有一个表单来编辑部分记录。在我的表单中,我可以通过提供允许我选择日期的字段xtype: 'datefield'来编辑添加日期的字段。当我为我的记录选择一个新日期时,它会显示11/29/2011(从我上面的日期开始),但是当我提交该表单来更新记录时,它会在请求有效负载中发布类似的内容:{"date_added": "NaN-NaN-NaNTNaN:NaN:NaN"}

是否有人可以了解如何在Extjs中保存以时间戳检索的字段中的日期?

2 个答案:

答案 0 :(得分:2)

我最近用网格面板做了这个。

即使数据作为时间戳从数据库返回,使用type: date对我来说也没问题......

// DATA MODEL
Ext.define('Particle', {
    extend: 'Ext.data.Model',
    fields: [
        { name: 'particle_id', type: 'long' },
        { name: 'name', type: 'string' },
        { name: 'type', type: 'string' },
        { name: 'start_date', type: 'date' },
        { name: 'sched_date', type: 'date' },
        { name: 'sched_time', type: 'date' },
        { name: 'notes', type: 'string' }
    ]
});

我在列模型中渲染了日期值,如下所示,请注意renderer:配置选项。 (我正在使用field:配置选项,因为我在其中使用了grideditor扩展来允许在网格上自行编辑数据 - 如果您以单独的形式编辑值,则不需要这样做。)

// GRID COLUMN MODEL 
    var columns = [
        {text: "Name", flex: 1, sortable: true, dataIndex: 'name', renderer: function(data,meta,record){meta.attr = 'ext:qtitle="Notes:"ext:qtip="' + record.get('notes') + '"'; return data;}}, 
        {text: "Type", width: 55, sortable: true, dataIndex: 'case_lvl'},
        {text: "RF Started", width: 80, sortable: true, dataIndex: 'start_date', renderer: Ext.util.Format.dateRenderer('j-M-Y')},
        {text: "Sched Date", width: 80, sortable: true, dataIndex: 'sched_date', field: 'datefield', renderer: Ext.util.Format.dateRenderer('j-M-Y')},
        {text: "Sched Time", width: 80, sortable: true, dataIndex: 'sched_time', field: 'timefield', renderer: Ext.util.Format.dateRenderer('g:i A')}
    ];

要专门回答您的问题,我将日期值作为时间戳字符串返回到数据库,方法是使用Ext.Date.format()将其从字段中删除。您可以在提交表单之前添加此内容。

schedDate = Ext.Date.format(Ext.getCmp('schedDate').getValue(),'Y-m-d') + Ext.Date.format(Ext.getCmp('schedTime').getValue(),' H:i:s')

答案 1 :(得分:0)

在您的数据字段中尝试这样:

    {xtype: 'datefield',
    anchor: '100%',
    fieldLabel: 'Date',
    name: 'date',
    format: 'm d Y'}

并将格式更改为'd-M-Y h:i a'