236 votes

J'ai 2 dates en PHP, comment puis-je exécuter une boucle foreach pour passer en revue tous ces jours ?

Je commence par une date 2010-05-01 et se terminant par 2010-05-10 . Comment puis-je itérer à travers toutes ces dates en PHP ?

15voto

Mark Baker Points 90240
$startTime = strtotime('2010-05-01'); 
$endTime = strtotime('2010-05-10'); 

// Loop between timestamps, 1 day at a time 
$i = 1;
do {
   $newTime = strtotime('+'.$i++.' days',$startTime); 
   echo $newTime;
} while ($newTime < $endTime);

ou

$startTime = strtotime('2010-05-01'); 
$endTime = strtotime('2010-05-10'); 

// Loop between timestamps, 1 day at a time 
do {
   $startTime = strtotime('+1 day',$startTime); 
   echo $startTime;
} while ($startTime < $endTime);

2 votes

Il semble que cette solution soit plus lente que la réponse acceptée (j'ai fait quelques benchs : 100% plus lent pour 60 itérations). Mais j'ai choisi cette solution pour des raisons de rétro-compatibilité avec les anciennes plateformes d'hébergement.

5voto

user2182143 Points 802

Utilisateur de cette fonction:-

function dateRange($first, $last, $step = '+1 day', $format = 'Y-m-d' ) {
                $dates = array();
                $current = strtotime($first);
                $last = strtotime($last);

                while( $current <= $last ) {    
                    $dates[] = date($format, $current);
                    $current = strtotime($step, $current);
                }
                return $dates;
        }

Utilisation / appel de fonction:-

Augmentation d'un jour :-

dateRange($start, $end); //increment is set to 1 day.

Augmentation par mois:-

dateRange($start, $end, "+1 month");//increase by one month

utilisez le troisième paramètre si vous souhaitez définir le format de la date : -.

   dateRange($start, $end, "+1 month", "Y-m-d H:i:s");//increase by one month and format is mysql datetime

2voto

Jean Souza Points 21

Voici un moyen :

 $date = new Carbon();
 $dtStart = $date->startOfMonth();
 $dtEnd = $dtStart->copy()->endOfMonth();

 $weekendsInMoth = [];
 while ($dtStart->diffInDays($dtEnd)) {

     if($dtStart->isWeekend()) {
            $weekendsInMoth[] = $dtStart->copy();
     }

     $dtStart->addDay();
 }

Le résultat de $weekendsInMoth est un tableau de jours de week-end !

2voto

rule_it_subir Points 39

Pour Carbon utilisateurs

use Carbon\Carbon;

$startDay = Carbon::parse("2021-08-01");
$endDay= Carbon::parse("2021-08-05");
$period = $startDay->range($endDay, 1, 'day');

Quand j'imprime les données

[
     Carbon\Carbon @1627790400 {#4970
       date: 2021-08-01 00:00:00.0 America/Toronto (-04:00),
     },
     Carbon\Carbon @1627876800 {#4974
       date: 2021-08-02 00:00:00.0 America/Toronto (-04:00),
     },
     Carbon\Carbon @1627963200 {#4978
       date: 2021-08-03 00:00:00.0 America/Toronto (-04:00),
     },
     Carbon\Carbon @1628049600 {#5007
       date: 2021-08-04 00:00:00.0 America/Toronto (-04:00),
     },
     Carbon\Carbon @1628136000 {#5009
       date: 2021-08-05 00:00:00.0 America/Toronto (-04:00),
     },
]

Voici le vidage des données de Laravel en utilisant dd($period->toArray()); . Vous pouvez maintenant itérer à travers $period si vous voulez avec un foreach déclaration.

Une remarque importante - il comprend les deux dates de bord fournies à la méthode.

Pour plus d'informations sur les dates, consultez le site Web de la Commission européenne. Documents sur le carbone .

1voto

zukayu Points 29
$date = new DateTime($_POST['date']);
$endDate = date_add(new DateTime($_POST['date']),date_interval_create_from_date_string("7 days"));

while ($date <= $endDate) {
    print date_format($date,'d-m-Y')." AND END DATE IS : ".date_format($endDate,'d-m-Y')."\n";
    date_add($date,date_interval_create_from_date_string("1 days"));
}

Vous pouvez également itérer de cette manière, la $_POST['date'] peut être dérobé à partir de votre application ou de votre site web Au lieu de $_POST['date'] vous pouvez également placer votre chaîne ici "21-12-2019" . Les deux fonctionneront.

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