Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

dd/mm/YYYY format date – while loop problems adding 1 day

I am creating a while loop in PHP to iterate through all the days between two dates.

$startdate = "17/12/2022"; // my dd/mm/YYYY format start date
$startdate = str_replace('/', '-',$startdate); // convert the slashes to dashes to signify european date format
$startdate = strtotime($startdate); // convert the date into a date object
$enddate = "16/12/2023"; // my dd/mm/YYYY format start date
$enddate = str_replace('/', '-',$enddate); // convert the slashes to dashes to signify european date format
$enddate = strtotime($enddate); // convert the date into a date object

echo(date('d/m/Y',$startdate)."<br/>");
echo(date('d/m/Y',$enddate)."<br/>");

while($startdate <= $enddate) {
    $dayofweek = date('w',$startdate); // a task
    echo($dayofweek)."<br/>");
    //I need to increment the $startdate by one day here?
}
?>

I believe that changing the slashes to dashes effectively instructs PHP to recognise the date as dd/mm/YYYY rather than mm/dd/YYYY.

I then convert both dates to a date object using strtotime so that they can be compared.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

I then need to add 1 day to the $startdate and loop, but it is the adding one day that is foxing me.
All the examples I can find are using todays date or a string not formatted dd/mm/YYYY.

I freely admit that I may have got the whole premise wrong but any pointers for good practise would be appreciated.

>Solution :

Using the DateTime class and the DateInterval Class and the DatePeriod class you get quite a bit of the heavy lifting done for you

$startdate = "17/12/2022"; // my dd/mm/YYYY format start date
$enddate = "31/12/2022"; // my dd/mm/YYYY format start date

$sDate = ( new Datetime() )->createFromFormat('d/m/Y', $startdate);
$eDate = ( new Datetime() )->createFromFormat('d/m/Y', $enddate);

$oneDay = new DateInterval('P1D');
$daterange = new DatePeriod($sDate, $oneDay ,$eDate);

foreach ( $daterange as $dat) {
    echo $dat->format('d/m/y - w D') . PHP_EOL;
}

RESULTS using a smaller range of dates

17/12/22 - 6 Sat
18/12/22 - 0 Sun
19/12/22 - 1 Mon
20/12/22 - 2 Tue
21/12/22 - 3 Wed
22/12/22 - 4 Thu
23/12/22 - 5 Fri
24/12/22 - 6 Sat
25/12/22 - 0 Sun
26/12/22 - 1 Mon
27/12/22 - 2 Tue
28/12/22 - 3 Wed
29/12/22 - 4 Thu
30/12/22 - 5 Fri

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading