使用human_time_diff无法显示时间差,请求排查问题原因
问题排查与解决方案
嘿,这个问题我之前也碰到过!问题出在human_time_diff()的参数类型上——它需要的是整数时间戳,但你传入的是字符串格式的日期(Y-m-d H:i:s),函数没法识别这种格式,所以才没有输出内容。
具体修正步骤:
- 将日期字符串转换为时间戳:用PHP的
strtotime()函数把$commenttime转换成整数时间戳,这个函数能完美解析Y-m-d H:i:s格式的字符串。 - 添加异常判断:避免ACF字段为空或格式错误时出现报错,先检查字段值是否有效,再进行转换。
- 调用
human_time_diff():此时传入时间戳参数,函数就能正常计算时间差了。另外,human_time_diff()的第二个参数默认就是当前时间戳,所以可以直接省略,简化代码。
完整修正代码:
<?php // 获取ACF字段的日期字符串 $commenttime = get_sub_field( 'time', $postid ); // 验证字段值并转换为时间戳 if ( $commenttime && $comment_timestamp = strtotime( $commenttime ) ) { // 输出时间差,省略第二个参数则默认使用当前时间 echo human_time_diff( $comment_timestamp ) . ' ago'; } else { // 字段为空或格式错误时的 fallback 提示 echo 'Unknown time'; } ?>
额外说明:
strtotime()支持绝大多数标准日期格式,你的Y-m-d H:i:s完全符合要求,转换不会有问题。- 如果坚持要使用
current_time('timestamp')作为第二个参数也是可以的,它会遵循WordPress站点设置的时区,和time()函数的系统时区有所区别,根据你的需求选择即可。
内容的提问来源于stack exchange,提问作者Rob
相关产品推荐
相关产品推荐

