Como comparar duas datas no mesmo formulário

Introdução

Gostaria de comparar duas datas dentro do mesmo formulário? Usando um pequeno snippet PHP pode facilmente pegar em duas datas e compará-las dentro do mesmo formulário. Neste tutorial, vamos usar um snippet PHP que vai pegar em dois selectores de datas dentro do mesmo formulário.

Criar o formulário

Primeiro, precisamos de configurar o nosso formulário. Vamos criar um formulário e adicionar os nossos campos, incluindo os dois campos do formulário Data que estão definidos para o formato Data.

crie o seu formulário e adicione os seus campos, incluindo os 2 campos de data

Depois de adicionar estes campos, certifique-se de que os define como Selecionador de data no separador Avançado.

definir o campo de data para utilizar o seletor de data para ambos os campos

Se precisar de ajuda para criar o seu formulário, consulte esta documentação.

Adicionar o snippet para comparar duas datas

Antes de adicionar o snippet, é necessário localizar o ID do formulário e ambos os IDs de campo para os campos de Data que acabou de adicionar ao formulário.

Se precisar de ajuda para encontrar estes números de identificação, consulte este tutorial.

Quando tiver esses IDs, pode adicionar o seguinte snippet ao seu site.

/**
 * Compare 2 dates inside the same form.
 *
 * @link  https://wpforms.com/developers/how-to-compare-two-dates-in-the-same-form/
 */

function wpf_dev_compare_dates( $fields, $entry, $form_data ) {
      
    // Optional, you can limit to specific forms. Below, we restrict output to
    // form #731.
    if ( absint( $form_data[ 'id' ] ) !== 731 ) {
        return $fields;
    }
      
	// 3 is the ID of date 1 field
	$date_1 = $fields[3][ 'unix' ]; 
	
	// 4 is the ID of date 2 field
	$date_2 = $fields[4][ 'unix' ]; 
	
	// If date 2 is earlier of the same as time 1
	if ( $date_2 <= $date_1 ) {

		
                // [ 'header' ] will display the error message above the form
                // [ 'footer' ] will display the error message under the form
		wpforms()->process->errors[ $form_data[ 'id' ] ][ 'header' ] = esc_html__( 'The pickup date should not be earlier than the order date.', 'plugin-domain' );
	}
	
}
add_action( 'wpforms_process', 'wpf_dev_compare_dates', 10, 3 );

Se não tiver a certeza de onde ou como adicionar snippets personalizados ao seu site, consulte este tutorial.

A forma como o snippet funciona é que só será executado no formulário ID 731, depois procurará o ID do campo Date de 3 e o ID do campo Date de 4 e atribui-los-á às variáveis $date_1 e $date_2 para que possa verificar se $date_2 é menor ou igual a $date_1, se for, apresentará um erro acima do segundo campo Date mostrando que esta data não pode ser anterior à outra.

a mensagem de erro aparecerá acima quando o snippet para comparar duas datas falhar

E é tudo o que precisa para comparar duas datas no mesmo formulário! Também gostaria de fornecer alguma funcionalidade para uma restrição de idade ao seu formulário? Veja o nosso tutorial sobre Como fornecer uma restrição de idade no campo de formulário Datepicker.

Referência da ação: wpforms_process