How to calculate between two dates?

2

I have to do an exercise to calculate how much has happened since January 1 to the date entered. They force me to use switch case and I can not use the function mktime() , and I do not finish working the code that subtracts the dates. The error that gives me is the following: Edito , the teacher has indicated that I do it by extracting the month and adding the number of days, but it does not work for me:

HTML :

<!DOCTYPE html>
    <html>
        <head><meta charset="UTF-8"></head>
        <title> Calendario</title>
        <body>
            <center><h3>Introduce una fecha en formato dd/mm/aa para saber cuánto ha transcurrido desde el 1 de enero de 2016:</h3></center>
            <date-util format="dd/MM/yy"></date-util>
            <form name="Formulario" method="post" action="ejercicio5.php">
            <table>
                <tr>
                    <td>
                        Fecha inicial:
                    </td>
                </tr>
                <tr>
                    <td><input type="date" name="fecha1" value="dd/MM/yy" required>
                        <input type="dare" name="fecha16" value="01/01/16">
                    </td>

                    <tr>
                        <td><input type="submit" name="Enviar">
                        <input type="reset" name="Reestablecer">
                        </td>
                    </tr>
                </tr>
            </table>
            </form>
        </body>
</html>

PHP :

    <?php
//Definición de variables
$entrada = (string) $_POST['fecha1'];
$fechafija = (string) "2016-01-01";
echo "$entrada <br/>";
echo "$fechafija <br/>";
$diaentrada =  substr($entrada, 8, 9);
$diafijo =  substr($fechafija, 8, 9);
$mes = substr($entrada, 5, 6);
$numentrada = (int) $diaentrada;
$numfijo = (int) $diafijo;
//Ejercicio
echo "$numentrada y $numfijo el número de mes es $mes <br/>";
switch ($mes) {
    case '1':
            $dif = $diaentrada - $diafijo;
            echo "Han pasado $dif días";
        break;
        case '2':
            $dif2 = $diaentrada - $diafijo +28;
            echo "han pasado $dif2 días";
            break;
        case '3':
            $dif3 = $diaentrada - $diafijo +28+31;
            echo "Han pasado $dif3 días";
            break;
        case '4':
            $dif4 = $diaentrada - $diafijo +30+31+28;
            echo "Han pasado $dif4 días";
            break;
        case '5':
            $dif5 = $diaentrada - $diafijo +30+31+28+30;
            echo "Han pasado $dif5 días";
            break;
        case '6':
            $dif6 = $diaentrada - $diafijo +30+31+28+30+30;
            echo "Han pasado $dif6 días";
            break;
        case '7':
            $dif7 = $diaentrada - $diafijo +30+31+28+30+30+31;
            echo "Han pasado $dif7 días";
            break;
        case '8':
            $dif6 = $diaentrada - $diafijo +30+31+28+30+30+31+30;
            echo "Han pasado $dif8 días";
            break;
        case '9':
            $dif9 = $diaentrada - $diafijo +30+31+28+30+30+31+30+31;
            echo "Han pasado $dif9 días";
            break;
        case '10':
            $dif10 = $diaentrada - $diafijo +30+31+28+30+30+31+30+31+31;
            echo "Han pasado $dif10 días";
            break;
        case '11':
            $dif11 = $diaentrada - $diafijo +30+31+28+30+30+31+30+31+31+30;
            echo "Han pasado $dif11 días";
            break;
        case '12':
            $dif12 = $diaentrada - $diafijo +30+31+28+30+30+31+30+31+31+30+31;
            echo "Han pasado $dif12 días";
            break;
    default:
        echo "No funciono :D";
        break;
}
?>
    
asked by ras212 25.10.2016 в 00:43
source

1 answer

3

You can use DateTime :: diff to return the difference between two DateTime objects:

<?php
$fecha1 = new DateTime($_POST["fecha1"]);
$fecha2 = new DateTime($_POST["fecha2"]);

$diffDias = $fecha1->diff($fecha2);

// solo >= PHP 7 
$fechas = $fecha1 <=> $fecha2;

switch ($fechas) {
    case 0:
        echo "Es la misma fecha";
        break;
    case -1:
        echo "En $diffDias->d dias";
        break;
     case 1:
        echo "Hace $diffDias->d dias";
        break;
}

Watch Demo

    
answered by 25.10.2016 в 01:01