Como comparar dois campos de tempo num formulário

Introdução

Está interessado em comparar dois campos de tempo no seu formulário e registar a diferença calculada na sua entrada? Não precisa de procurar mais! Este tutorial foi feito sob medida para você. Iremos guiá-lo através do processo de configuração do seu formulário e fornecer-lhe o snippet PHP necessário para implementar esta funcionalidade no seu site.

Criar o formulário

Para começar, vamos criar um novo formulário e configurar os nossos campos. Neste guia, vamos criar um formulário especificamente para reservar salões de festas. O nosso snippet utilizará um campo oculto para calcular e anexar automaticamente o total de horas reservadas à entrada. Esta funcionalidade é particularmente útil para a equipa de contabilidade, fornecendo uma visão geral simples para a faturação.

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

Na configuração do nosso formulário, incluiremos campos padrão como Nome, E-mail, Endereço e Telefone. Além disso, vamos incorporar um campo Dropdown para seleção do quarto, um campo Data para a data da reserva, dois campos Hora para especificar as horas de início e fim da reserva e, finalmente, um Campo Oculto final para armazenar o total de horas calculado utilizando o nosso snippet.

comece por criar o seu formulário e adicionar os seus campos

Adicionar o snippet

Em seguida, vamos adicionar o snippet ao nosso site. Se não tiver a 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 );

Este snippet só será executado no ID do formulário 731. Analisará os dois Tempo campos do formulário, que são os IDs 37 e 38. Utilizar o round calculará a diferença entre os dois tempos e armazenará a diferença dentro da função Campo oculto

Terá de atualizar o snippet para corresponder aos IDs do formulário e do campo que tem no seu formulário. Se precisar de ajuda para saber onde encontrar essas IDs, consulte este tutorial.

utilizando este snippet pode agora ter dois campos de tempo num formulário

Também gostaria de comparar duas datas? Consulte o nosso tutorial sobre Como comparar duas datas no mesmo formulário.

Referência da ação: wpforms_process