【问题标题】:Ext JS 6.2, How to convert date to sql format:2017-08-25 16:34?Ext JS 6.2,如何将日期转换为sql格式:2017-08-25 16:34?
【发布时间】:2017-08-31 07:46:10
【问题描述】:

我正在使用 Ext Js v6.2 Grid,在我的应用程序中,我有 Datetimefield,对于用户,我将日期格式显示为

format: 'd/m/Y H:i'

但是在向sql提交数据时,我需要转换为sql格式,

format: 2017-08-25 16:34 

这是我的代码,我将输出为2016-03-14T18:30:00.000Z,但我需要它为format: 2017-08-25 16:34

如果我错了,请更正我的代码,我已经在文档和其他没有帮助的东西中搜索过。

var headerObj = page.getForm().getFieldValues();
var hdrData = "<HeaderData>" + x2js.json2xml_str(headerObj)" +</HeaderData>";
console.log(hdrData);
{
  xtype: 'datefield',
  border: true,
  width: '100%',
  fieldLabel: 'somefield',
  name: 'somefield',
  format: 'd/m/Y H:i',
  submitFormat: 'Y-m-d H:i',
}

【问题讨论】:

  • 这只是组件定义。显示您的提交代码。
  • @Alexander 更新了我的代码,我将字段值作为 json 并将它们转换为 xml,以便我可以将 xml 传递给 sql。

标签: javascript datetime extjs datepicker sencha-touch


【解决方案1】:

ExtJS 没有提供这样做的功能。您必须创建一个自定义函数来转换您的日期:

Date.prototype.toNormalizedDate = function(){
    var normalizedDate = new Date(Date.UTC(this.getFullYear(), this.getMonth(), this.getDate(), this.getHours(), this.getMinutes(), this.getSeconds()));
    return normalizedDate.toISOString();
}

【讨论】:

    【解决方案2】:

    getFieldValues 方法返回模型数据。模型数据旨在与商店模型一起使用,该模型通常可以使用 javascript 日期,因此,该函数从日期字段返回 javascript 日期。只有在序列化期间,javascript 日期才会转换为字符串,使用浏览器默认设置(因为序列化函数已经期望输入仅为字符串)。

    您可能想尝试的是form.getSubmitData。此函数将返回所有字段的字符串值;对于日期字段,然后使用submitFormat 格式化日期。

    第二种可能性是使用模型提交,而不是表单。

    为加载/保存操作定义一个具有代理的模型:

    Ext.define('MyModel',{
        extend: 'Ext.data.Model',
        fields:[{
            name: 'somefield',
            type: 'date',
            dateFormat: 'Y-m-d H:i'
        }],
        proxy: {
            url: '...'
        }
    })
    

    然后要么创建新记录并输入表格:

    form.loadRecord(Ext.create('MyModel'))
    

    或从服务器编辑现有记录:

    MyModel.load(id, {
        success: function(record) {
            form.loadRecord(record);
        }
    })
    

    然后再次保存到服务器:

    form.updateRecord();
    form.getRecord().save({
        success: function() {
            Ext.alert('Saved!');
        }
    });
    

    这有一个简洁的副作用,您可以将 ExtJS 的原始 XML 读取器和写入器添加到您的模型代理中,并且您可以取消自己的 XML 转换功能。

    【讨论】:

      【解决方案3】:

      在 ExtJs 文档中,表单具有使用 getValues 获取表单所有值的方法。可以参考ExtJs docs

      我创建了一个小演示来向您展示它是如何工作的。

      Sencha fiddle

      Ext.create('Ext.form.Panel', {
          renderTo: Ext.getBody(),
          width: 300,
          bodyPadding: 10,
          title: 'Date',
          margin: 10,
          items: [{
              xtype: 'datefield',
              anchor: '100%',
              fieldLabel: 'From',
              format: 'd/m/Y H:i',
              submitFormat: 'Y-m-d H:i',
              allowBlank: false,
              name: 'date'
          }, {
              xtype: 'button',
              text: 'Submit Date',
              formBind: true,
              handler: function () {
                  var date = this.up('form').getValues().date;
                  /* this is also one way to get value by date field.
                      date =this.up('form').down('datefield').getValue(),
                      submittedDate = Ext.Date.format(date,'Y-m-d H:i');
                  */
                  Ext.Msg.alert('Success', `Selected date is <b>${date}</b>`);
              }
          }]
      });
      

      【讨论】:

        猜你喜欢
        • 2016-06-22
        • 1970-01-01
        • 1970-01-01
        • 2017-01-26
        • 1970-01-01
        • 2012-01-08
        • 2018-02-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多