You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

基于周数间隔与起始日期计算设备下次检查日期的WordPress函数开发

如何完善WordPress短代码函数来计算设备下次检查日期?

我正在编写一个WordPress短代码函数,用来计算设备的下次检查日期,但目前代码还没完成。当前的代码如下:

function get_next_check(){ 
    $today = date(get_option('date_format')); 
    $first_check = types_get_field_meta_value( 'first_check', $post_id ); 
    // 间隔为周数,例如:月=4,年=52 
    $interval = types_get_field_meta_value( 'interval', $post_id ); 
    // 计算今日之后的下一次检查日期 
    $next_check = ; 
    return $next_check; 
} 
add_shortcode( 'next_check', 'get_next_check' );

我的思路是生成所有可能的检查日期数组,逐个和今日日期对比,返回符合条件的下一个日期,但不知道具体该怎么实现,请问该如何完善这个函数?


解决方案

你的思路完全没问题,我们可以通过时间戳来处理日期计算,避免字符串对比的麻烦,下面是完善后的函数:

function get_next_check(){
    // 全局获取当前文章ID,确保能拿到自定义字段值
    global $post;
    $post_id = $post->ID;

    // 获取今日日期的时间戳(0点整,避免当天检查的情况被忽略)
    $today_timestamp = strtotime('today');
    
    // 获取首次检查日期并转换为时间戳
    $first_check_str = types_get_field_meta_value( 'first_check', $post_id );
    $first_check_timestamp = strtotime($first_check_str);
    
    // 获取间隔周数,默认设为4周(1个月)防止空值
    $interval_weeks = intval(types_get_field_meta_value( 'interval', $post_id )) ?: 4;
    $interval_seconds = $interval_weeks * 7 * 24 * 60 * 60; // 转换为秒数
    
    $next_check_timestamp = $first_check_timestamp;
    
    // 如果首次检查日期已经过去,循环生成后续检查日期
    while ($next_check_timestamp <= $today_timestamp) {
        $next_check_timestamp += $interval_seconds;
    }
    
    // 用WordPress设置的日期格式返回结果
    $next_check = date(get_option('date_format'), $next_check_timestamp);
    
    return $next_check;
}
add_shortcode( 'next_check', 'get_next_check' );

关键细节说明:

  • 获取文章ID:通过global $post拿到当前文章的ID,确保能正确读取自定义字段值;如果需要支持指定文章ID,可以给短代码加参数扩展。
  • 时间戳处理:把所有日期转成时间戳,这样加减和对比都更准确,strtotime('today')会把今日日期设为当天0点,避免当天的检查日期被误判为已过期。
  • 间隔转换:把周数转成秒数,方便直接累加计算后续日期。
  • 循环逻辑:从首次检查日期开始,不断加上间隔时间,直到找到第一个晚于今日的日期,这就是我们要的下次检查日期。
  • 空值处理:给$interval_weeks加了默认值4,防止自定义字段为空时函数出错。

内容的提问来源于stack exchange,提问作者warm__tape

火山引擎 最新活动