120 votes

incrémenter la date d'un mois

Disons que j'ai une date au format suivant : 2010-12-11 (année-mois-jour)

Avec PHP, je veux incrémenter la date d'un mois, et je veux que l'année soit automatiquement incrémentée, si nécessaire (c'est-à-dire incrémenter de décembre 2012 à janvier 2013).

Regards.

0voto

Mat Barnett Points 11

Je trouve que la fonction mtkime() fonctionne très bien pour cela :

$start_date="2021-10-01";
$start_date_plus_a_month=date("Y-m-d", mktime(0, 0, 0, date("m",strtotime($start_date))+1, date("d",strtotime($start_date)), date("Y",strtotime($start_date))));

résultat : 2021-11-01

J'aime soustraire 1 du "jour" pour obtenir "2021-10-31", ce qui peut être utile si vous souhaitez afficher une plage de 12 mois, par exemple du 1er octobre 2021 au 30 septembre 2022.

$start_date_plus_a_year=date("Y-m-d", mktime(0, 0, 0, date("m",strtotime($start_date))+12, date("d",strtotime($start_date))-1, date("Y",strtotime($start_date))));

résultat : 2022-09-30

-2voto

user9401222 Points 1

Mettre une date dans le champ de saisie puis cliquer sur le bouton obtenir le jour à partir de la date en jquery

$(document).ready( function() {
    $("button").click(function(){   
    var day = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
    var a = new Date();
    $(".result").text(day[a.getDay()]);

    });  
             });

-2voto

Sasi Kumar S Points 1
 <?php
              $selectdata ="select fromd,tod  from register where username='$username'";
            $q=mysqli_query($conm,$selectdata);
            $row=mysqli_fetch_array($q);

            $startdate=$row['fromd']; 
            $stdate=date('Y', strtotime($startdate));  

            $endate=$row['tod']; 
            $enddate=date('Y', strtotime($endate));  

            $years = range ($stdate,$enddate);
            echo '<select name="years" class="form-control">';
            echo '<option>SELECT</option>';
            foreach($years as $year)
              {   echo '<option value="'.$year.'"> '.$year.' </option>';  }
                echo '</select>'; ?>

-2voto

Wojtek Suszycki Points 64

Toutes les solutions présentées ne fonctionnent pas correctement.
strtotime() et DateTime::add o DateTime::modifier donnent parfois des résultats invalides.
Exemples :
- 31.08.2019 + 1 mois donne 01.10.2019 au lieu de 30.09.2019
- 29.02.2020 + 1 an donne 01.03.2021 au lieu de 28.02.2021
(testé sur PHP 5.5, PHP 7.3)

Voici ma fonction basée sur idée publiée par Angelo qui résout le problème :

// $time - unix time or date in any format accepted by strtotime() e.g. 2020-02-29  
// $days, $months, $years - values to add
// returns new date in format 2021-02-28
function addTime($time, $days, $months, $years)
{
    // Convert unix time to date format
    if (is_numeric($time))
    $time = date('Y-m-d', $time);

    try
    {
        $date_time = new DateTime($time);
    }
    catch (Exception $e)
    {
        echo $e->getMessage();
        exit;
    }

    if ($days)
    $date_time->add(new DateInterval('P'.$days.'D'));

    // Preserve day number
    if ($months or $years)
    $old_day = $date_time->format('d');

    if ($months)
    $date_time->add(new DateInterval('P'.$months.'M'));

    if ($years)
    $date_time->add(new DateInterval('P'.$years.'Y'));

    // Patch for adding months or years    
    if ($months or $years)
    {
        $new_day = $date_time->format("d");

        // The day is changed - set the last day of the previous month
        if ($old_day != $new_day)
        $date_time->sub(new DateInterval('P'.$new_day.'D'));
    }
    // You can chage returned format here
    return $date_time->format('Y-m-d');
}

Exemples d'utilisation :

echo addTime('2020-02-29', 0, 0, 1); // add 1 year (result: 2021-02-28)
echo addTime('2019-08-31', 0, 1, 0); // add 1 month (result: 2019-09-30)
echo addTime('2019-03-15', 12, 2, 1); // add 12 days, 2 months, 1 year (result: 2019-09-30)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X