Date Comparison in PHP

-1

I am making this code to compare the current date with the date I entered in the form, I used this logic to do this, but apparently it is not working. What could be wrong?

<?php 
$data = $_POST['data'];

$nData = getdate();

$dataAno = date('y',strtotime($data));
$dataMes = date('m',strtotime($data));
$dataDia = date('d',strtotime($data));


if($dataAno > $nData['year']){
    echo "Essa data não passou ainda..";

}elseif ($dataAno == $nData['year']){

    if($dataMes > $nData['mon']){
        echo "Essa data não passou ainda..";

    }elseif($dataMes == $nData['mon']){

        if($dataDia > $nData['mday']){
            echo "Essa data não passou ainda...";

        }elseif($dataDia == $nData['mday']){

            echo "Essa data é a data de hoje!!!";
        }echo "Essa data ja passou";
    }

}

?>

The form looks like this:

<html>
<form method="post" action="teste.php">
    <label>Data:</label>
    <input type="date" name="data"><br><br>


    <button type="submit">Enviar</button>
</form>

    
asked by anonymous 13.04.2018 / 20:08

3 answers

1

One of the errors in your code is:

In the line below it brings you the year with two digits, that is, 18

$dataAno = date('y',strtotime($data));

and you're comparing with $nData[year] that returns 2018

So, change y pendent% to Y uppercase to return year with 4 digits

$dataAno = date('Y',strtotime($data)); // 2018
  

The comparisons of months and days should also have their format changed to be able to make a comparison correctly (it will be a comparison of type strlen :).

$nData['mon'] //Representação numérica de um mês 1 a 12

$nData['mday'] // Representação numérica do dia do mês 1 a 31

So, to make comparison with the above values, we should have

// n - representação numérica de um mês, sem zero à esquerda
$dataMes = date('n',strtotime($data));

// j - dia do mês sem zero à esquerda
$dataDia = date('j',strtotime($data));
  

In fact, your% of% in certain situations should be

Corrected code

<?php 
if(isset( $_POST['data'])){

    $data = $_POST['data'];

    $nData = getDate();

    $dataAno = date('Y',strtotime($data));
    $dataMes = date('n',strtotime($data));
    $dataDia = date('j',strtotime($data));


    if($dataAno > $nData['year']){
        echo "Essa data não passou ainda..";

    }elseif ($dataAno == $nData['year']){

        if($dataMes > $nData['mon']){
            echo "Essa data não passou ainda..";

        }elseif($dataMes == $nData['mon']){

            if($dataDia > $nData['mday']){
                echo "Essa data não passou ainda...";
            }elseif($dataDia == $nData['mday']){
                echo "Essa data é a data de hoje!!!";
            }else{
                echo "Essa data ja passou";
            }
        }

    }else{
       echo "Essa data ja passou";
    }
}

?>
    
13.04.2018 / 20:37
2

This should already work

$dataInformada = '2018-04-13';
$dataAtual = date( 'Y-m-d' );
if( $dataInformada < $dataAtual ) {
    echo 'Data informada menor que data atual';
}
    
13.04.2018 / 20:44
1

You can transform the date directly into an array with the explode function:

<?php 

if(isset( $_POST['data'])){

    $data = explode('-' , $_POST['data']);

    $nData = getdate();

    $dataAno = $data[0];
    $dataMes = $data[1];
    $dataDia =$data[2];


    if($dataAno > $nData['year']){
        echo "Essa data não passou ainda..";

    }elseif ($dataAno == $nData['year']){

        if($dataMes > $nData['mon']){
            echo "Essa data não passou ainda..";

        }elseif($dataMes == $nData['mon']){

            if($dataDia > $nData['mday']){
                echo "Essa data não passou ainda...";

            }elseif($dataDia == $nData['mday']){
                echo "Essa data é a data de hoje!!!";
            }
        }

    }

}
?>
<form method="post" >
    <label>Data:</label>
    <input type="date" name="data"><br><br>   
    <button type="submit">Enviar</button>
</form>

There are more efficient and cost-effective ways to compare dates with PHP. But with that you can build your algorithm. I think that's the proposal.

    
13.04.2018 / 20:26