Drupal 7自定义视图显示错误时间戳,与数据库表数据不符
解决Drupal 7视图中时间戳字段显示错误(1969/12/31)的问题
我之前也碰到过一模一样的情况,这种显示其实是视图把时间戳当成了0来解析(Unix时间戳0对应的本地时间,时区不同会有小时差),本质是没有正确读取到数据库里的date_entered值。下面是几个实用的排查和修复方向:
1. 先确认视图字段的数据源配置
- 进入视图编辑页,找到
date_entered字段,检查字段来源是否精准指向了你要读取的数据库表列。如果你的表设置了别名,或者不小心选了关联表的同名字段,就会导致读不到正确值。 - 点击字段的「修改」按钮,在「格式化程序」选项里,确认选的是「Unix时间戳」对应的处理格式,而不是其他不匹配的类型(比如直接用日期格式处理时间戳数值)。
2. 检查数据库字段的类型和实际数据
- 用数据库客户端(比如phpMyAdmin)打开目标表,确认
date_entered字段类型是INT或TIMESTAMP,且每条记录的数值都是有效的Unix时间戳(是大于0的整数,比如1690000000这类)。 - 如果字段类型是
DATETIME而非时间戳,那视图里的字段配置要改成对应日期类型的处理方式,不能用Unix时间戳的格式化程序。
3. 重新配置视图字段
有时候Drupal 7视图处理自定义表字段会有缓存或配置异常,试试:
- 删除当前的
date_entered字段,重新添加一次,添加时务必选对「字段: date_entered」(来自你的自定义表),别选成系统自带的时间字段。 - 查看字段设置的「更多」选项,确认没有开启「排除显示」或其他可能干扰值读取的开关。
4. 用自定义PHP字段强制处理
如果上面的方法都没效果,可以尝试添加一个「全局: PHP」字段,手动读取并格式化时间戳:
// 替换成视图中你的表别名+字段名,比如$row->custom_table_date_entered $timestamp = $row->date_entered; if ($timestamp > 0) { return format_date($timestamp, 'custom', 'Y/m/d - H:i'); } else { return '无有效时间'; }
注意:使用PHP字段需要开启PHP过滤模块,且要确保代码里的字段名和视图表别名对应正确。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

