php 日歷類 日歷控件
<?php class CalendarForm {protected $year; protected $month; protected $day; protected $weekend; protected $currentdate; protected $dayofmonth; protected $day_count; protected $num; protected $week = array(); protected $retunrhtml = "";
function __construct($year, $month) { $this->makeWeeks($year, $month); }
public function setYearMonth($year, $month) { $this->year = $year; $this->month = $month; }
private function resetDayCount() { $this->day_count = 1; }
private function setFirstWeek() { $this->num = 0; }
public function getDayOfMonth($year, $month) { $this->resetDayCount(); return date('t', mktime(0, 0, 0, $month, $this->day_count, $year)); }
private function setDayOfMonth($year, $month) { $this->dayofmonth = $this->getDayOfMonth($year, $month); }
private function getDayOfWeek() { return date('w', mktime(0, 0, 0, $this->month, $this->day_count, $this->year)); }
public function getNextMonth() { return date('m', mktime(0, 0, 0, $this->month, 28, $this->year) + 432000); }
public function getNextYear() { return date('Y', mktime(0, 0, 0, $this->month, 28, $this->year) + 432000); }
public function getPrevMonth() { return date('m', mktime(0, 0, 0, $this->month, 1, $this->year) - 432000); }
public function getPrevYear() { return date('Y', mktime(0, 0, 0, $this->month, 1, $this->year) - 432000); }
private function makeWeeks($year, $month) {
$this->setYearMonth($year, $month); $this->setDayOfMonth($this->year, $this->month); $this->setFirstWeek(); $this->num = 0; for ($i = 0; $i < 7; $i++) { $dayofweek = $this->getDayOfWeek(); $dayofweek = $dayofweek - 1; if ($dayofweek == -1) { $dayofweek = 6; } if ($dayofweek == $i) { $this->week[$this->num][$i] = $this->day_count; $this->day_count++; } else { $this->week[$this->num][$i] = ""; } } while (TRUE) { $this->num++; for ($i = 0; $i < 7; $i++) { $this->week[$this->num][$i] = $this->day_count; $this->day_count++; if ($this->day_count > $this->dayofmonth) { break; } } if ($this->day_count > $this->dayofmonth) { break; } }
}
public function getCalendarHeader() { $this->retunrhtml = "<table class=\"calendar-table\">" . "<tbody>" . "<tr><th colspan=\"7\">" . $this->month . "/" . $this->year . "</th></tr>" . "<tr>" . "<th style=\"text-align: center;\">Monday</th>" . "<th style=\"text-align: center;\">Tuesday</th>" . "<th style=\"text-align: center;\">Wednesday</th>" . "<th style=\"text-align: center;\">Thursday</th>" . "<th style=\"text-align: center;\">Friday</th>" . "<th style=\"text-align: center;\">Saturday</th>" . "<th style=\"text-align: center;\">Sunday</th>" . "</tr>"; }
public function getCalendarFooter() { $this->retunrhtml .= "</tbody></table>"; }
public function getBeginTR() { $this->retunrhtml .= "<tr>"; }
public function getEndTR() { $this->retunrhtml .= "</tr>"; }
protected function getDay() { return $this->day; }
protected function getMonth() { return $this->month; }
protected function getYear() { return $this->year; }
protected function isWeekend() { return $this->weekend; }
protected function isCurrent() { return $this->currentdate; }
public function getTDHref() { return $this->getDay(); }
public function getTD() { $class = ''; $td = "td"; if ($this->isCurrent()) { $class = 'today'; } $this->retunrhtml .= "<$td class=\"$class\">" . $this->getTDHref() . "</$td>"; }
public function getTDWeekend() { $class = ''; $td = "td"; if ($this->isCurrent()) { $class = 'today'; } $this->retunrhtml .= "<$td class=\"$class\">" . $this->getTDHref() . "</$td>"; }
protected function makeCodeMonth($year, $month) { $this->makeWeeks($year, $month); $this->getCalendarHeader(); for ($i = 0; $i < count($this->week); $i++) { $this->getBeginTR(); for ($j = 0; $j < 7; $j++) {
if (!empty($this->week[$i][$j])) { $this->day = $this->week[$i][$j]; $this->currentdate = 0; if ($this->year == date('Y') && $this->month == date('m') && $this->day == date('j')) { $this->currentdate = 1; } if ($j == 5 || $j == 6) { $this->weekend = 1; $this->getTDWeekend(); } else { $this->weekend = 0; $this->getTD(); } } else { $this->retunrhtml .= "<td> </td>"; } } $this->getEndTR(); } $this->getCalendarFooter();
}
public function getCodeMonth() { $this->makeCodeMonth($this->year, $this->month); return $this->retunrhtml; }
public function showCodeMonth() { echo $this->getCodeMonth(); }
}
class TechCalendarForm extends CalendarForm { public function getTDHref() { if ($this->isWeekend()) { $font = "<font color=\"#FF3F4F\">"; } else { $font = "<font color=\"#4A5B6C\">"; } return "<a href=\"" . $_SERVER["PHP_SELF"] . "?action=showdate&date=" . parent::getYear() . "-" . parent::getMonth() . "-" . parent::getDay() . "\">" . $font . parent::getDay() . "</font></a>"; } }</pre>