问题
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