SuiteCRM API时间显示异常问题求助
问题背景
近期将CRM升级至7.12.5版本后,API返回的时间格式出现逻辑矛盾:
- 此前API返回时间均为GMT+00:00格式,例如
01-01-2023T13:00:00Z-00:00,符合ISO8601标准; - 现在API返回格式变为
01-01-2023T13:00:00-05:00,但其中13:00:00仍是数据库(MariaDB)中存储的GMT时间,相当于给GMT时间强行套上了-05:00时区标识; - 实例:EST时间13:00:00创建的记录,数据库正确存储为GMT 18:00,但API返回
...T18:00:00-05:00; - 额外现象:部分旧记录的
date_entered和date_modified字段时区不一致(如date_entered为2018-09-17T13:38:00-04:00、date_modified为2020-02-27T16:12:00-05:00),此前所有字段时区均为-00:00。
可能的原因
系统时区配置被升级重置
CRM升级过程中,默认系统时区或API输出时区配置可能被修改。原本系统配置为GMT+0,升级后被重置为服务器本地时区(如EST/EDT),但API输出时未正确将数据库存储的GMT时间转换为目标时区,仅直接给原时间字符串追加了时区偏移标识,导致逻辑冲突。可排查CRM后台的系统时区设置(如Admin > System Settings > Time Zone)或相关配置项(如default_timezone、date_time_format)。数据库连接时区参数变更
升级操作可能修改了CRM与MariaDB的连接时区参数。原本CRM连接数据库时执行SET time_zone = '+00:00',升级后改为使用服务器本地时区,导致CRM读取时间字段时错误地将存储的GMT时间识别为本地时区时间,进而在API输出时加上本地时区偏移,但未对时间值做转换。新旧记录时区不一致的现象也佐证了配置变更发生在升级后,且影响新生成/修改的记录。API时间格式化逻辑存在版本bug
SugarCRM 7.12.5版本的API时间处理模块可能存在bug:在将数据库存储的GMT时间转换为输出格式时,跳过了时间值的时区转换步骤,直接将系统配置的时区偏移追加到原GMT时间字符串后,导致格式上的矛盾。可通过对比CRM前端显示的时间与API返回时间验证:如果前端显示正确的本地时间(如EST 13:00),而API返回18:00:00-05:00,则可确认是API格式化逻辑问题。夏令时规则错误应用
旧记录的时区偏移-04:00(EDT夏令时)和-05:00(EST冬令时)对应不同时段的夏令时切换,说明系统可能启用了夏令时自动切换,但错误地将偏移直接应用到了原本存储的GMT时间上,而非先将GMT时间转换为对应时区的本地时间再添加偏移。
内容的提问来源于stack exchange,提问作者qozle

