You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在WordPress Gravity Forms中计算两个时间字段的间隔分钟数

计算Gravity Forms中两个时间字段的间隔分钟数

没问题,我帮你把日期间隔的代码适配成时间间隔的需求,刚好能实现你要的两个时间字段差转分钟数的功能。下面是具体的实现步骤和代码:

实现步骤

  1. 确认你的表单结构:两个时间字段(假设它们的字段ID分别是1和2),一个数字字段(字段ID假设是3)用来展示最终的间隔分钟数。
  2. 将下面的代码添加到你的WordPress主题的functions.php文件中,或者使用自定义代码插件(比如Code Snippets)来添加,避免主题更新丢失代码。

完整代码

/**
 * Gravity Forms: Calculate Minutes Between Two Time Fields
 * 计算两个时间字段之间的间隔分钟数并填充到数字字段
 */
add_action( 'gform_pre_submission_YOUR_FORM_ID', 'gw_calculate_time_interval_minutes' );
function gw_calculate_time_interval_minutes( $form ) {

    // 替换成你自己的字段ID:$start_time_field_id、$end_time_field_id、$result_field_id
    $start_time_field_id = 1;
    $end_time_field_id = 2;
    $result_field_id = 3;

    // 获取表单提交的时间值
    $start_time = rgpost( "input_{$start_time_field_id}" );
    $end_time = rgpost( "input_{$end_time_field_id}" );

    // 如果时间值为空,直接返回
    if ( empty( $start_time ) || empty( $end_time ) ) {
        return;
    }

    // 将时间字符串转换为时间戳(基于当天日期)
    $start_timestamp = strtotime( date( 'Y-m-d' ) . ' ' . $start_time );
    $end_timestamp = strtotime( date( 'Y-m-d' ) . ' ' . $end_time );

    // 处理跨天的情况(比如结束时间早于开始时间,说明是第二天的时间)
    if ( $end_timestamp < $start_timestamp ) {
        $end_timestamp += 24 * 60 * 60; // 添加一天的秒数
    }

    // 计算间隔秒数,转换为分钟
    $interval_minutes = ( $end_timestamp - $start_timestamp ) / 60;

    // 将结果填充到数字字段
    $_POST["input_{$result_field_id}"] = $interval_minutes;
}

代码说明

  • 记得把代码中的YOUR_FORM_ID替换成你实际的表单ID(可以在Gravity Forms表单列表中查看)。
  • rgpost()是Gravity Forms的内置函数,用来安全获取表单提交的值。
  • 代码中处理了跨天场景:比如开始时间是23:00,结束时间是01:00,会自动计算为120分钟而不是负数。
  • 如果不需要跨天处理,可以删除if ( $end_timestamp < $start_timestamp )这段逻辑。

实时前端计算(可选)

如果你希望用户在填写时间时就能实时看到间隔分钟数,而不是等到提交后,可以添加一段前端JS代码:

// 替换成你的表单ID、时间字段ID和结果字段ID
const formId = 'YOUR_FORM_ID';
const startTimeId = 'input_1';
const endTimeId = 'input_2';
const resultId = 'input_3';

document.addEventListener('input', function(e) {
    if (e.target.id === startTimeId || e.target.id === endTimeId) {
        const startTime = document.getElementById(startTimeId).value;
        const endTime = document.getElementById(endTimeId).value;
        
        if (!startTime || !endTime) {
            document.getElementById(resultId).value = '';
            return;
        }
        
        const start = new Date(`2000-01-01T${startTime}`);
        let end = new Date(`2000-01-01T${endTime}`);
        
        if (end < start) {
            end.setDate(end.getDate() + 1);
        }
        
        const diffMs = end - start;
        const diffMins = Math.floor(diffMs / 60000);
        
        document.getElementById(resultId).value = diffMins;
    }
});

把这段JS添加到你的主题自定义JS中,或者通过Gravity Forms的表单设置里的"自定义HTML"字段插入。

内容的提问来源于stack exchange,提问作者Petra Žagar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:35:53