web-dev-qa-db-fra.com

Comment créer une plage de dates avec php?

J'ai essayé de gagner du temps avec PHP. date de début du 2017-01-29 au 2017-12-29. Mais cela m'est arrivé. Je ne pouvais pas imprimer en février, car le maximum mensuel était de 28 jours. Comment passer commande quand même mais avec la date de février jusqu'à 28.

mon script:

    date_default_timezone_set('UTC');

    // Start date
    $date = '2017-01-29';
    // End date
    $end_date = '2017-12-29';

    while (strtotime($date) <= strtotime($end_date)) {
                echo "$date\n"; 
                echo "<br>";
                $date = date ("Y-m-d", strtotime("+1 month", strtotime($date)));
    } 

Sortie:

 enter image description here

8
Siti Rahmah

Utilisez la classe DateTime pour rechercher le dernier jour du mois suivant:

date_default_timezone_set('UTC');

// Start date
$date = '2017-01-29';
// End date
$end_date = '2017-12-29';

while (strtotime($date) <= strtotime($end_date)) {
            echo "$date\n"; 
            echo "<br>";
            $d = new DateTime( $date );
            $d->modify( 'last day of next month' );
            $date = $d->format( 'Y-m-d' );
}

Ce n’est peut-être pas tout à fait ce qui vous intéresse, car vous voudrez peut-être essayer différentes dates de début et ne pas aller à la fin du mois prochain, ou vous voudrez peut-être utiliser le 2/28 pour la date de février, mais ensuite remonter au 29 pour chaque mois successif. Mais cela devrait vous rapprocher de la logique dont vous avez besoin. Je pense que l'utilisation de DateTime fera partie de votre réponse.

6
davidethell

Une autre approche consiste à essayer de ne pas utiliser DateTime.

    date_default_timezone_set('UTC');

    // Start date
    $date = '2017-01-29';
    // End date
    $end_date = '2017-12-29';

    while (strtotime($date) <= strtotime($end_date)) {
        echo "$date\n"; 
        echo "<br>";
        $date = date("Y-m-t", strtotime("+30 day", strtotime($date)));
    }

En utilisant strtotime("+30 day", strtotime($date), vous pouvez ajouter 30 jours à la date actuelle et obtenir la dernière date du mois avec t.

    2017-01-29 
    2017-02-28 
    2017-03-31 
    2017-04-30 
    2017-05-31 
    2017-06-30 
    2017-07-31 
    2017-08-31 
    2017-09-30 
    2017-10-31 
    2017-11-30 
2
A J

utilisez ceci 

date ("Y-m-t", strtotime("+1 month", strtotime($date)));

au lieu de cela pour obtenir le dernier jour du mois

date ("Y-m-d", strtotime("+1 month", strtotime($date)));
1

Essayez ce code:

    <?php 
         $from = new DateTime;
         $to = new DateTime('+1 year');

        for($date=clone $from; $date<$to; $date->modify('+1 day')){
              echo $date->format('Y-m-d');
         }
    ?> 
0
Pradeep Singh