Exercice 4.8: vérificateur de date Terminé

Consigne

Ecrivez un algorithme qui après avoir demandé un numéro de jour, de mois et d'année à l'utilisateur, renvoie s'il s'agit ou non d'une date valide.
Cet exercice est certes d’un manque d’originalité affligeant, mais après tout, en algorithmique comme ailleurs, il faut connaître ses classiques ! Et quand on a fait cela une fois dans sa vie, on apprécie pleinement l’existence d’un type numérique « date » dans certains langages…).
Il n'est sans doute pas inutile de rappeler rapidement que le mois de février compte 28 jours, sauf si l’année est bissextile, auquel cas il en compte 29. L’année est bissextile si elle est divisible par quatre. Toutefois, les années divisibles par 100 ne sont pas bissextiles, mais les années divisibles par 400 le sont.

Pseudo code

DAY, MONTH, YEAR, REST des entiers
DAYINMONTH un tableau
CHECKDATE une fonction

DEBUT
    ECRIRE "Sélectionner un numéro de jour."
    ECRIRE "Sélectionner un numéro de mois."
    ECRIRE "Sélectionner un numéro d'année."

    LIRE DAY
    LIRE MONTH
    LIRE YEAR

    DAYINMONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    
    SI (MONTH === 2)
        REST = YEAR % 4
        
        SI (REST === 0)
            DAYINMONTH[1] = 29
        FIN SI
    FIN SI

    FONCTION CHECKDATE()
        SI (MONTH < 1 OU MONTH > 12)
            RETURN FALSE
        FIN SI

        SI (DAY < 1 OU DAY > DAYINMONTH[MONTH - 1])
            RETURN FALSE
        FIN SI

        SI (YEAR < 1)
            RETURN FALSE
        FIN SI

        RETURN TRUE
    FIN FONCTION

    SI (CHECKDATE())
        ECRIRE "La date est correcte."
    SINON
        ECRIRE "La date n'est pas correcte."
    FIN SI
FIN

Conversion

function javascript() {
    let output = document.querySelector('.response-displayer > .codeblock > pre#javascript');
        output.classList.add('show');
    let day = document.querySelector('input[name="day"]').value;
    let month = document.querySelector('input[name="month"]').value;
    let year = document.querySelector('input[name="year"]').value;

    let daysInMonths = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

    day = +day;
    month = +month;
    year = +year;

    /**
     * Add one day to February on leap years
     * Februrary:
     *      - month(input) : 2
     *      - daysInMonths[1] : Array offset
     * "%" get modulo of a division (the rest).
     */
    if (month == 2)
    {
        let rest = year % 4;
        if (rest == 0) { daysInMonths[1] = 29; }
    }

    function checkDate() {
        if (month < 1 || month > 12) { return false; } // Month [1;12]
        if (day < 1 || day > daysInMonths[month -1]) { return false; } // /!\ daysInMonths[month - 1] : Array offset
        if (year < 1) { return false; } // Year should be positive
        return true;
    }

    if (checkDate()) {
        output.innerHTML = "La date est bonne."
    } else {
        output.innerHTML = "La date n'est pas correcte."
    }
}
function jquery() {
    $('.response-displayer > .codeblock > pre').removeClass('show');
    let $output = $('.response-displayer > .codeblock > pre#jquery').addClass('show');
    let $day = $('input[name="day"]').val();
    let $month = $('input[name="month"]').val();
    let $year = $('input[name="year"]').val();

    let daysInMonths = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

    let rest;

    $day = +$day;
    $month = +$month;
    $year = +$year;

    if ($month == 2)
    {
        rest = $year % 4;
        if (rest == 0) { daysInMonths[1] = 29; }
    }

    function checkDate() {
        if ($month < 1 || $month > 12) { return false; } // Month [1;12]
        if ($day < 1 || $day > daysInMonths[$month -1]) { return false; } // /!\ daysInMonths[month - 1] : Array offset
        if ($year < 1) { return false; } // Year should be positive
        return true;
    }

    if (checkDate()) {
        $output.html("La date est bonne.");
    } else {
        $output.html("La date n'est pas correcte.");
    }
}
<?php

$daysInMonths;
$rest;

$day = intval($_POST['day']);
$month = intval($_POST['month']);
$year = intval($_POST['year']);

function dateCheck($day, $month, $year) {
    $daysInMonths = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

    if ($month == 2)
    {
        $rest = $year % 4;
        if ($rest == 0) { $daysInMonths[1] = 29; }
    }

    if ($month < 1 || $month > 12) { return false; } // Month [1;12]
    if ($day < 1 || $day > $daysInMonths[$month -1]) { return false; } // /!\ daysInMonths[month - 1] : Array offset
    if ($year < 1) { return false; } // Year should be positive
    
    return true;
}

if (dateCheck($day, $month, $year)) {
    echo "La date est bonne.";
} else {
    echo "La date n'est pas correcte.";
}

Choisissez un language:

Entrez les valeurs nécessaires:

Résultat du code

Le résultat s'affichera après l'exécution du code.