PHP:WordPress中文章修改时间与当前时间的60秒内比较逻辑问题及解决
解决WordPress中判断文章是否60秒内修改的逻辑问题
首先,咱们来拆解下你代码里的几个关键问题,这些问题直接导致了逻辑判断出错:
- 时区设置位置错误:
date_default_timezone_set应该放在所有时间计算的最前面,否则你获取的修改时间和当前时间可能会基于不同时区,导致差值计算完全不准。 - 时间戳转换与逻辑判断混乱:
- 你拼接
get_the_modified_date()和get_the_modified_time()再转时间戳,其实WordPress有现成的get_the_modified_timestamp()函数,直接返回修改时间的时间戳,更可靠也更简洁。 - 原代码里的
$plus_datetime计算完全没有意义,0*0*0*60等于0,判断修改时间戳是否小于等于0不符合实际(修改时间肯定是有效的时间,不会小于等于0)。 - if条件里的
($curr_datetime < strtotime($mod_datetime)) > $plus_datetime属于逻辑错误:$curr_datetime是字符串格式的时间,和时间戳直接比较类型不匹配;而且用布尔值(比较结果)和数值比较也完全不符合你的需求。
- 你拼接
正确的实现思路
核心逻辑其实很简单:计算当前时间戳与文章修改时间戳的差值,判断差值是否≤60秒。
修正后的代码
<?php // 先设置时区,确保所有时间计算统一 date_default_timezone_set('Europe/Warsaw'); // 获取文章修改时间的时间戳(WordPress内置函数,直接返回时间戳更可靠) $mod_timestamp = get_the_modified_timestamp(); // 获取当前时间戳 $curr_timestamp = time(); // 计算时间差(当前时间 - 修改时间,单位:秒) $time_diff = $curr_timestamp - $mod_timestamp; // 判断是否在60秒或更短时间内修改过(加≥0避免时区/系统时间偏差导致的异常) if ($time_diff <= 60 && $time_diff >= 0) { echo 'True'; } else { echo 'False at all'; } ?>
代码解释
- 用
get_the_modified_timestamp()直接获取修改时间戳,避免了字符串拼接和转换可能出现的格式问题。 - 计算
$curr_timestamp - $mod_timestamp得到时间差,只要差值在0到60秒之间,就判定为“最近60秒内修改”。 - 逻辑清晰直接,没有多余的复杂判断,后续维护和排查问题也更方便。
内容的提问来源于stack exchange,提问作者wassaabii
相关产品推荐
相关产品推荐

