Drupal 7 无法显示存储为Unix时间戳格式的1970年前日期
问题根因
你当前使用的Date (unix timestamp)字段类型是导致1970年前日期无法显示的核心原因:
Unix时间戳以1970年1月1日0点UTC为起始零点,早于这个时间的日期会被转换为负时间戳,而Drupal核心旧版本、部分自定义格式化逻辑默认不支持负时间戳的解析渲染,哪怕数据库存储正常,前端输出时也会被过滤为空。

你当前的字段配置见下图:
解决方案
- 更换字段存储类型
把现有Date (unix timestamp)字段替换为Date (Date and Time)类型,该类型底层使用datetime格式存储,不依赖Unix时间戳规则,支持公元前1年到公元9999年的全时段日期,完全规避时间戳的边界限制。你可以通过Drupal核心的字段迁移工具批量迁移已有的存量日期数据,无需手动录入。 - 调整日期格式化规则
进入后台「配置 > 区域和语言 > 日期和时间格式」,检查你正在使用的日期输出格式,避免使用依赖Unix时间戳的自定义格式化代码,优先选择Drupal原生提供的datetime格式化器输出日期。 - 排查自定义逻辑冲突
如果你在主题模板、自定义模块中写了字段预处理钩子(比如hook_preprocess_field),检查是否存在「只有时间戳大于0才输出」的过滤逻辑,这类逻辑会直接拦截1970年前日期对应的负时间戳,导致输出为空。
内容的提问来源于stack exchange,提问作者Xenetrix
相关产品推荐
相关产品推荐

