标签:
<?php
class Calendar {
private $year;
private $month;
private $val;
private $weeks = array (‘日‘, ‘一‘, ‘二‘, ‘三‘, ‘四‘, ‘五‘, ‘六‘ );
function __construct($options = array(), $val) {
$this->year = date ( ‘Y‘ );
$this->month = date ( ‘m‘ );
$this->val = $val;
$vars = get_class_vars ( get_class ( $this ) );
foreach ( $options as $key => $value ) {
if (array_key_exists ( $key, $vars )) {
$this->$key = $value;
}
}
}
function display() {
$value .= ‘<table class="calendar">‘;
$value .= $this->showChangeDate ();
$value .= $this->showWeeks ();
$value .= $this->showDays ( $this->year, $this->month );
$value .= ‘</table>‘;
return $value;
}
private function showWeeks() {
$value .= ‘<tr>‘;
foreach ( $this->weeks as $title ) {
$value .= ‘<th>‘ . $title . ‘</th>‘;
}
$value .= ‘</tr>‘;
return $value;
}
private function showDays($year, $month) {
$nowtime = mktime(0,0,0,$month,1,$year);//当月1号转为秒
$daysofmonth = date(t,$nowtime);//当月天数
$weekofbeginday = date(w,$nowtime);//当月第一天是星期几
$weekofendday = date(w,mktime(0,0,0,$month+1,0,$year));//当月最后一天是星期几
$daysofprevmonth = date(t,mktime(0,0,0,$month,0,$year));//上个月天数
$count = 1;//计数
//列出上月后几天
for($i = 1 ; $i <= $weekofbeginday ; $i++)
{
$value .= "<td>".($daysofprevmonth-$weekofbeginday+$i)."</td>";
$count++;
}
//当月全部
for($i = 1 ; $i <= $daysofmonth ; $i++)
{
$css = ($count%7==0 || $count%7==1)?"weekday":"normalday";
if($i == $today) $css .= "today";
$value .= "<td class=‘".$css."‘>".$i."</td>";
if($count%7==0) $value .= "</tr><tr>";
$count++;
}
//下月前几天
for ($i = 1;$i <= 6-$weekofendday;$i++)
{
$value .= "<td class=‘othermonth‘>".$i."</td>";
}
$value .= ‘</tr>‘;
return $value;
}
private function showChangeDate() {
$url = basename ( $_SERVER [‘PHP_SELF‘] );
$value = ‘<tr>‘;
$value .= ‘<td><a href="?‘ . $this->preYearUrl ( $this->year, $this->month ) . ‘">‘ . ‘上年‘ . ‘</a></td>‘;
$value .= ‘<td><a href="?‘ . $this->preMonthUrl ( $this->year, $this->month ) . ‘">‘ . ‘上月‘ . ‘</a></td>‘;
$value .= ‘<td colspan="3"><form>‘;
$value .= ‘<select name="year" onchange="window.location=\‘‘ . $url . ‘?year=\‘+this.options[selectedIndex].value+\‘&month=‘ . $this->month . ‘\‘">‘;
for($ye = 1970; $ye <= 2038; $ye ++) {
$selected = ($ye == $this->year) ? ‘selected‘ : ‘‘;
$value .= ‘<option ‘ . $selected . ‘ value="‘ . $ye . ‘">‘ . $ye . ‘</option>‘;
}
$value .= ‘</select>‘;
$value .= ‘<select name="month" onchange="window.location=\‘‘ . $url . ‘?year=‘ . $this->year . ‘&month=\‘+this.options[selectedIndex].value+\‘\‘">‘;
for($mo = 1; $mo <= 12; $mo ++) {
$selected = ($mo == $this->month) ? ‘selected‘ : ‘‘;
$value .= ‘<option ‘ . $selected . ‘ value="‘ . $mo . ‘">‘ . $mo . ‘</option>‘;
}
$value .= ‘</select>‘;
$value .= ‘</form></td>‘;
$value .= ‘<td><a href="?‘ . $this->nextMonthUrl ( $this->year, $this->month ) . ‘">‘ . ‘下月‘ . ‘</a></td>‘;
$value .= ‘<td><a href="?‘ . $this->nextYearUrl ( $this->year, $this->month ) . ‘">‘ . ‘下年‘ . ‘</a></td>‘;
$value .= ‘</tr>‘;
return $value;
}
private function preYearUrl($year, $month) {
$year = ($this->year <= 1970) ? 1970 : $year - 1;
return ‘year=‘ . $year . ‘&month=‘ . $month;
}
private function nextYearUrl($year, $month) {
$year = ($year >= 2038) ? 2038 : $year + 1;
return ‘year=‘ . $year . ‘&month=‘ . $month;
}
private function preMonthUrl($year, $month) {
if ($month == 1) {
$month = 12;
$year = ($year <= 1970) ? 1970 : $year - 1;
} else {
$month --;
}
return ‘year=‘ . $year . ‘&month=‘ . $month;
}
private function nextMonthUrl($year, $month) {
if ($month == 12) {
$month = 1;
$year = ($year >= 2038) ? 2038 : $year + 1;
} else {
$month ++;
}
return ‘year=‘ . $year . ‘&month=‘ . $month;
}
}
<?php
//获取日历
$year = date ( "Y" );
$month = date ( "m" );
$params = array (‘year‘ => $year, ‘month‘ => $month );
if (isset ( $_GET [‘year‘] ) && isset ( $_GET [‘month‘] )) {
$params = array (‘year‘ => $_GET [‘year‘], ‘month‘ => $_GET [‘month‘] );
$year = $_GET [‘year‘];
$month = $_GET [‘month‘];
}
$cal = new Calendar ( $params, $list_sign );
echo $cal->display ();
?>

标签:
原文地址:http://my.oschina.net/yonghan/blog/510130