php完美的日期日历生成类

作者:袖梨 2022-06-24

example:
include_once '/class/calendar.class.php';
$simple_example = new calendar();
print($simple_example->output_calendar());

*/

 代码如下 复制代码
class calendar{
 var $date;
 var $year;
 var $month;
 var $day;
 
 var $week_start_on = false;
 var $week_start = 7;// sunday
 
 var $link_days = true;
 var $link_to;
 var $formatted_link_to;
 
 var $mark_today = true;
 var $today_date_class = 'today';
 
 var $mark_selected = true;
 var $selected_date_class = 'selected';
 
 var $mark_passed = true;
 var $passed_date_class = 'passed';
 
 var $highlighted_dates;
 var $default_highlighted_class = 'highlighted';
 
 
 /* constructor */
 function calendar($date = null, $year = null, $month = null){
  $self = htmlspecialchars($_server['php_self']);
  $this->link_to = $self;
  
  if( is_null($year) || is_null($month) ){
   if( !is_null($date) ){
    //-------- strtotime the submitted date to ensure correct format
    $this->date = date("y-m-d", strtotime($date));
   } else {
    //-------------------------- no date submitted, use today's date
    $this->date = date("y-m-d");
   }
   $this->set_date_parts_from_date($this->date);
  } else {
   $this->year  = $year;
   $this->month = str_pad($month, 2, '0', str_pad_left);
  } 
 }
 
 function set_date_parts_from_date($date){
  $this->year  = date("y", strtotime($date));
  $this->month = date("m", strtotime($date));
  $this->day  = date("d", strtotime($date));
 }
 

 

 

 

 代码如下 复制代码


 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  = "

" . strtoupper($localized_day_name{0}) ."

 

 

 

 代码如下 复制代码

  //---------------------------------------------- initialize week counter
  $weeks = 1;
  
  //--------------------------------------------------- pad start of month
  
  //------------------------------------ adjust for week start on saturday
  for($i=1;$i<=$prepend;$i++){
   $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;
    

 

 

 

 代码如下 复制代码

    case 2 :
     if( is_array($this->highlighted_dates) ){
      if( in_array($day_date, $this->highlighted_dates) ){
       if( empty($this->formatted_link_to) ){
        $output .= "link_to . "?date=" . $day_date . "">";
       } else {
        $output .= "
formatted_link_to, strtotime($day_date)) . "">";
       }
      }
     }
     
     $output .= $day;
     
     if( is_array($this->highlighted_dates) ){
      if( in_array($day_date, $this->highlighted_dates) ){
       if( empty($this->formatted_link_to) ){
        $output .= "
";
       } else {
        $output .= "";
       }
      }
     }
    break;
   }
   
   //------------------------------------------------- close table cell
   $output .= "
";
  
  //--------------------------------------------------------------- return
  return $output;
  
 }
 
}

//调用日期生成类的方法

 代码如下 复制代码

include_once '/class/calendar.class.php';
$simple_example = new calendar();
print($simple_example->output_calendar());

相关文章

精彩推荐