function day_of_week($date){
$day_of_week = date("n", $date);
if( !is_numeric($day_of_week) ){
$day_of_week = date("w", $date);
if( $day_of_week == 0 ){
$day_of_week = 7;
}
}
return $day_of_week;
}
function output_calendar($year = null, $month = null, $calendar_class = 'calendar'){
if( $this->week_start_on !== false ){
echo "the property week_start_on is replaced due to a bug present in version before 2.6. of this class! use the property week_start instead!";
exit;
}
//--------------------- override class methods if values passed directly
$year = ( is_null($year) )? $this->year : $year;
$month = ( is_null($month) )? $this->month : str_pad($month, 2, '0', str_pad_left);
//------------------------------------------- create first date of month
$month_start_date = strtotime($year . "-" . $month . "-01");
//------------------------- first day of month falls on what day of week
$first_day_falls_on = $this->day_of_week($month_start_date);
//----------------------------------------- find number of days in month
$days_in_month = date("t", $month_start_date);
//-------------------------------------------- create last date of month
$month_end_date = strtotime($year . "-" . $month . "-" . $days_in_month);
//----------------------- calc offset to find number of cells to prepend
$start_week_offset = $first_day_falls_on - $this->week_start;
$prepend = ( $start_week_offset < 0 )? 7 - abs($start_week_offset) : $first_day_falls_on - $this->week_start;
//-------------------------- last day of month falls on what day of week
$last_day_falls_on = $this->day_of_week($month_end_date);
//------------------------------------------------- start table, caption
$output = " ";
$output .= "" . ucfirst(strftime("%b %y", $month_start_date)) . " ";
$col = '';
$th = '';
for( $i=1,$j=$this->week_start,$t=(3+$this->week_start)*86400; $i<=7; $i++,$j++,$t+=86400 ){
$localized_day_name = gmstrftime('%a',$t);
$col .= " ";
$th .= " " . strtoupper($localized_day_name{0}) ." | ";
$j = ( $j == 7 )? 0 : $j;
}
//------------------------------------------------------- markup columns
$output .= $col;
//----------------------------------------------------------- table head
$output .= " ";
$output .= " ";
$output .= $th;
$output .= " ";
$output .= " ";
//---------------------------------------------------------- start tbody
$output .= " ";
$output .= " ";
代码如下 |
复制代码 |
//---------------------------------------------- initialize week counter
$weeks = 1;
//--------------------------------------------------- pad start of month
//------------------------------------ adjust for week start on saturday
for($i=1;$i<=$prepend;$i++){
$output .= " | | ";
}
//--------------------------------------------------- loop days of month
for($day=1,$cell=$prepend+1; $day<=$days_in_month; $day++,$cell++){
/*
if this is first cell and not also the first day, end previous row
*/
if( $cell == 1 && $day != 1 ){
$output .= " ";
}
//-------------- zero pad day and create date string for comparisons
$day = str_pad($day, 2, '0', str_pad_left);
$day_date = $year . "-" . $month . "-" . $day;
//-------------------------- compare day and add classes for matches
if( $this->mark_today == true && $day_date == date("y-m-d") ){
$classes[] = $this->today_date_class;
}
if( $this->mark_selected == true && $day_date == $this->date ){
$classes[] = $this->selected_date_class;
}
if( $this->mark_passed == true && $day_date < date("y-m-d") ){
$classes[] = $this->passed_date_class;
}
if( is_array($this->highlighted_dates) ){
if( in_array($day_date, $this->highlighted_dates) ){
$classes[] = $this->default_highlighted_class;
}
}
//----------------- loop matching class conditions, format as string
if( isset($classes) ){
$day_class = ' class="';
foreach( $classes as $value ){
$day_class .= $value . " ";
}
$day_class = substr($day_class, 0, -1) . '"';
} else {
$day_class = '';
}
//---------------------------------- start table cell, apply classes
$output .= " ";
//----------------------------------------- unset to keep loop clean
unset($day_class, $classes);
//-------------------------------------- conditional, start link tag
switch( $this->link_days ){
case 0 :
$output .= $day;
break;
case 1 :
if( empty($this->formatted_link_to) ){
$output .= "link_to . "?date=" . $day_date . "">" . $day . "";
} else {
$output .= "formatted_link_to, strtotime($day_date)) . "">" . $day . "";
}
break;
|
";
//--------------------------------------------------------------- return
return $output;
}
} |