php calendar – start calendar from monday-ThrowExceptions

Exception or error:

i have a calendar in php which displays a month view of the given month. There week starts from sunday and ends at saturday in a table. Basically it adds a new table row if the week is ended.
i want it to start the week from day monday and ends at sunday.
Here is my code. Calendar for March 2020 result in this link. Current Result Image

// Create array containing abbreviations of days of week.
 $daysOfWeek = array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');

 // What is the first day of the month in question?
 $firstDayOfMonth = mktime(0,0,0,$month,1,$year);

 // How many days does this month contain?
 $numberDays = date('t',$firstDayOfMonth);

 // Retrieve some information about the first day of the
 // month in question.
 $dateComponents = getdate($firstDayOfMonth);

 // What is the name of the month in question?
 $monthName = $dateComponents['month'];

 // What is the index value (0-6) of the first day of the
 // month in question.
 $dayOfWeek = $dateComponents['wday'];

 // Create the table tag opener and day headers

$datetoday = date('Y-m-d');



$calendar = "<table class='table table-bordered'>";


  $calendar .= "<tr>";

 // Create the calendar headers

 foreach($daysOfWeek as $day) {
      $calendar .= "<th  class='header'>$day</th>";
 } 

 // Create the rest of the calendar

 // Initiate the day counter, starting with the 1st.

 $currentDay = 1;

 $calendar .= "</tr><tr>";

 // The variable $dayOfWeek is used to
 // ensure that the calendar
 // display consists of exactly 7 columns.

 if ($dayOfWeek > 0) { 
     for($k=0;$k<$dayOfWeek;$k++){
            $calendar .= "<td  class='empty'></td>"; 

     }
 }


 $month = str_pad($month, 2, "0", STR_PAD_LEFT);

 while ($currentDay <= $numberDays) {

      // Seventh column (Saturday) reached. Start a new row.

      if ($dayOfWeek == 7) {

           $dayOfWeek = 0;
           $calendar .= "</tr><tr>";

      }

        $currentDayRel = str_pad($currentDay, 2, "0", STR_PAD_LEFT);
        $date = "$year-$month-$currentDayRel";

        $dayname = strtolower(date('l', strtotime($date)));

         $calendar.="<td><h4>$currentDay</h4></td>";






      // Increment counters

      $currentDay++;
      $dayOfWeek++;

 }



 // Complete the row of the last week in month, if necessary

 if ($dayOfWeek != 7) { 

      $remainingDays = 7 - $dayOfWeek;
        for($l=0;$l<$remainingDays;$l++){
            $calendar .= "<td class='empty'></td>"; 

     }

 }

 $calendar .= "</tr>";

 $calendar .= "</table>";

 echo $calendar;
How to solve:

Change the following variables:
$daysOfWeek = array('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday');

and

$firstDayOfMonth = mktime(0,0,0,$month,1,$year) - 1;

// Create array containing abbreviations of days of week.
 $daysOfWeek = array('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday');

 // What is the first day of the month in question?
 $firstDayOfMonth = mktime(0,0,0,$month,1,$year) - 1;

 // How many days does this month contain?
 $numberDays = date('t',$firstDayOfMonth);

 // Retrieve some information about the first day of the
 // month in question.
 $dateComponents = getdate($firstDayOfMonth);

 // What is the name of the month in question?
 $monthName = $dateComponents['month'];

 // What is the index value (0-6) of the first day of the
 // month in question.
 $dayOfWeek = $dateComponents['wday'];

 // Create the table tag opener and day headers
 $datetoday = date('Y-m-d');
 $calendar = "<table class='table table-bordered'>";
 $calendar .= "<tr>";

 // Create the calendar headers
 foreach($daysOfWeek as $day) {
      $calendar .= "<th  class='header'>$day</th>";
 } 

 // Create the rest of the calendar
 // Initiate the day counter, starting with the 1st.
 $currentDay = 1;
 $calendar .= "</tr><tr>";

 // The variable $dayOfWeek is used to
 // ensure that the calendar
 // display consists of exactly 7 columns.
 if ($dayOfWeek > 0) { 
     for($k=0;$k<$dayOfWeek;$k++){
            $calendar .= "<td  class='empty'></td>"; 
     }
 }

 $month = str_pad($month, 2, "0", STR_PAD_LEFT);

 while ($currentDay <= $numberDays) {
      // Seventh column (Saturday) reached. Start a new row.
      if ($dayOfWeek == 7) {
           $dayOfWeek = 0;
           $calendar .= "</tr><tr>";
      }
      $currentDayRel = str_pad($currentDay, 2, "0", STR_PAD_LEFT);
      $date = "$year-$month-$currentDayRel";
      $dayname = strtolower(date('l', strtotime($date)));
      $calendar.="<td><h4>$currentDay</h4></td>";

 // Increment counters
      $currentDay++;
      $dayOfWeek++;
 }

 // Complete the row of the last week in month, if necessary
 if ($dayOfWeek != 7) { 
      $remainingDays = 7 - $dayOfWeek;
        for($l=0;$l<$remainingDays;$l++){
            $calendar .= "<td class='empty'></td>"; 
     }
 }

 $calendar .= "</tr>";
 $calendar .= "</table>";
 echo $calendar;

Leave a Reply

Your email address will not be published. Required fields are marked *