You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ExtJS datefield选择日期回存PostgreSQL出现日期少一天Bug

日期提交差1天问题解决方案

根因说明

  • 前端datefield选择日期后生成的JS Date对象为本地时区(南非UTC+2)的零点时间,例:选择2021-07-31对应Date对象值为2021-07-31T00:00:00+02:00
  • 框架默认序列化Date对象为UTC时区的ISO字符串,上述时间转换为UTC格式后为2021-07-30T22:00:00.000Z,后端直接取该字符串的日期部分就会出现差1天的问题,和夏令时无关。

解决方案

方案1:调整Store字段序列化逻辑(推荐,改动最小)

在原有Store的日期字段配置基础上,新增serialize配置项,提交时直接输出Y-m-d格式的纯日期字符串,不带时区信息:

{
  name: 'mydatefield',
  type: 'date',
  dateFormat: 'Y-m-d', // 原有读取配置保持不变
  // 新增序列化规则
  serialize: function(value) {
    return value ? Ext.Date.format(value, 'Y-m-d') : null;
  }
}

修改后提交的参数会直接变为mydatefield: '2021-07-31',和后端PostgreSQL的date类型完全匹配,不会触发时区转换。

方案2:调整datefield编辑器配置

如果不想修改Store配置,可以给datefield编辑器新增submitFormat配置,指定提交格式为Y-m-d:

{
  xtype: 'datecolumn',
  format: 'Y-m-d',
  editor: {
    xtype: 'datefield',
    format: 'Y-m-d',
    submitFormat: 'Y-m-d' // 新增该行配置
  }
}

方案3:后端兼容处理(兜底方案)

若前端改动受限,后端可在接收日期参数后,先按UTC时区解析时间,再转换为南非时区后取日期部分存储即可,该方案兼容性稍弱,更推荐优先调整前端配置。

内容的提问来源于stack exchange,提问作者Schalk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 15:33:01