Como comparar dois campos de tempo em um formulário

Introdução

Você tem interesse em comparar dois campos de tempo em seu formulário e capturar a diferença calculada em sua entrada? Não precisa mais procurar! Este tutorial foi feito sob medida para você. Nós o orientaremos no processo de configuração do formulário e forneceremos o snippet PHP necessário para implementar perfeitamente essa funcionalidade em seu site.

Criando o formulário

Para começar, vamos criar um novo formulário e configurar nossos campos. Neste guia, criaremos um formulário específico para a reserva de salões de festas. Nosso snippet utilizará um campo oculto para calcular e anexar automaticamente o total de horas reservadas à entrada. Esse recurso é particularmente útil para a equipe de contabilidade, fornecendo uma visão geral direta para o faturamento.

Se você não estiver familiarizado com a criação de formulários, pode consultar esta documentação para obter ajuda.

Em nossa configuração de formulário, incluiremos campos padrão como Nome, E-mail, Endereço e Telefone. Além disso, incorporaremos um campo Dropdown para a seleção do quarto, um campo Date para a data da reserva, dois campos Time para especificar os horários de início e término da reserva e, por fim, um Hidden Field final para armazenar o total de horas calculado usando nosso snippet.

Comece criando seu formulário e adicionando seus campos

Adicionando o snippet

Em seguida, adicionaremos o snippet ao nosso site. Se você não tiver certeza de onde ou como adicionar snippets, consulte este tutorial.

/**
 * Compare two time fields in a form
 * 
 * @link https://wpforms.com/developers/how-to-compare-two-time-fields-in-a-form/
 */

function wpf_wpforms_update_total_field( $fields, $entry, $form_data ) {

	// Only run on my form with ID = 731
	if( 731 != $form_data[ 'id' ] ){
        return $fields;
    }
	
    // Field ID 37 is the first time field of the form
    $start_time = strtotime( $fields[37][ 'value' ] );
    
    // Field ID 38 is the second time field of the form
    $finishing_time = strtotime( $fields[38][ 'value'] );
	
    // Field ID 41 is the hidden field that will calculate the difference
    // between the two time fields and store the hours inside a hidden field of the entry
	$fields[41][ 'value' ] = round(abs($finishing_time  - $start_time)/ 3600,2) . __( ' Hours', 'text-domain');

	return $fields;
}

add_filter( 'wpforms_process_filter', 'wpf_wpforms_update_total_field', 10, 3 );

Esse snippet será executado somente no ID do formulário 731. Ele examinará os dois Tempo campos do formulário, que são os IDs 37 e 38. Usando o round ele calculará a diferença entre os dois tempos e armazenará a diferença dentro da função Campo oculto

Você precisará atualizar o snippet para que corresponda aos IDs de formulário e de campo que você tem em seu formulário. Se precisar de ajuda para saber onde encontrar esses IDs, consulte este tutorial.

Usando esse snippet, agora você pode usar dois campos de tempo em um formulário

Você também gostaria de comparar duas datas? Dê uma olhada em nosso tutorial sobre Como comparar duas datas no mesmo formulário.

Referência da ação: wpforms_process