简体   繁体   中英

how to get wednesday date between two dates in php

need to obtain all wednesday dates between two dates. For ex start and end date=

01/07/2019 - 01/25/2019

expected result=

01/09/2019,
01/16/2019,
01/23/2019

can i use if ($startDate->format('w') == 2) {} condition to filter wednesdays and push into array. any method to get the result?

Use DatePeriod Class . date period allows iteration over a set of dates and times, recurring at regular intervals, over a given period.

$period = new DatePeriod(
     new DateTime($date1),
     new DateInterval('P1D'),
     new DateTime($date2)
);

$cnt = 0;
foreach ($period as $key => $value) {

    if($value->format('D') == 'Wed'){
        $wed[$cnt] = $value->format('m/d/Y');
        $cnt++;
    }   
}

Output

[0] => 01/09/2019
[1] => 01/16/2019
[2] => 01/23/2019
<?php

$from_date ='01/07/2019';
$to_date ='01/25/2019';

$from_date = new DateTime($from_date);
$to_date = new DateTime($to_date);

$get_date = array();
for ($date = $from_date; $date <= $to_date; $date->modify('+1 day')) {
   if($date->format('l') == 'Wednesday'){
        $get_date[] = $date->format('m/d/Y');
   }
}

print_r($get_date);

Out put

Array ( [0] => 01/09/2019 [1] => 01/16/2019 [2] => 01/23/2019 )

You will get the required output.

<?php

$date1 = date("01/07/2019");
$date2 = date("01/25/2019");
$day1 = date('D', strtotime($date1));
$period = new DatePeriod(New Datetime($date1),New DateInterval('P1D'),New DateTime($date2));

$cnt = 0;
foreach($period as $key => $value ){

  if($value->format('D') == 'Wed'){
        $wed[$cnt] = $value->format('m/d/Y');
        echo $wed[$cnt];        
        $cnt++;
        echo '<BR>';  

    } 

}



?>

Using the base DateTime class and instead of checking every day, just keep adding 7 days to the date and check if it is still less than the end date. The only additional logic is that if the start date is a Wednesday, then use this date, otherwise get the next Wednesday...

$fromDate = new DateTime('01/02/2019');
if ( $fromDate->format('D') != 'Wed')   {
    $fromDate->modify("next wednesday");
}
$toDate = new DateTime('01/25/2019');
do {
    echo $fromDate->format("m/d/Y").PHP_EOL;
} 
while ( $fromDate->modify(""+7 day"") < $toDate );

outputs...

01/02/2019
01/09/2019
01/16/2019
01/23/2019

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM