php calendar - start calendar from monday

时光怂恿深爱的人放手 提交于 2021-01-07 03:08:23

问题


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;

回答1:


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;



回答2:


change the following to make it work

$daysOfWeek = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'];

$firstDayOfMonth = mktime(0,0,0,$month,7,$year);


来源:https://stackoverflow.com/questions/60673936/php-calendar-start-calendar-from-monday

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!