在WordPress Gravity Forms中计算两个时间字段的间隔分钟数
计算Gravity Forms中两个时间字段的间隔分钟数
没问题,我帮你把日期间隔的代码适配成时间间隔的需求,刚好能实现你要的两个时间字段差转分钟数的功能。下面是具体的实现步骤和代码:
实现步骤
- 确认你的表单结构:两个时间字段(假设它们的字段ID分别是
1和2),一个数字字段(字段ID假设是3)用来展示最终的间隔分钟数。 - 将下面的代码添加到你的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
相关产品推荐
相关产品推荐

