大发体育娱乐在线-大发体育娱乐官方网站-大发体育娱乐登录网址
做最好的网站

php完美的日期日历生成类,php日历制作代码分享

来源:http://www.dfwstonefabricators.com 作者:关于计算机 人气:186 发布时间:2019-09-26
摘要:example: include_once '/class/calendar.class.php'; $simple_example = new calendar(); print($simple_example-output_calendar());   */ calendar.class.php  代码如下   class calendar{  var $date;  var $year;  var $month;  var $day;  

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

 
图片 1

*/

calendar.class.php

 代码如下

 

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));
 }  

复制代码 代码如下:

 

 <?php
class Calendar {
  private $year; //当前的年
  private $month; //当前的月
  private $start_weekday; //前一个月的第一天对应的是周几
  private $days; //当前月总结多少天

 

  function __construct(){
   $this->year=isset($_GET["year"]) ? $_GET["year"] : date("Y");
   $this->month=isset($_GET["month"]) ? $_GET["month"] : date("m");

 

   $this->start_weekday=date("w", mktime(0, 0, 0, $this->month, 1, $this->year));
   $this->days=date("t", mktime(0, 0, 0, $this->month, 1, $this->year));
  }

 代码如下

  function out(){
   echo '<table align="center">';
   $this->chageDate("test.php");
   $this->weeksList();
   $this->daysList();
   echo '</table>';
  }

 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);

  private function weeksList(){
   $week=array('日','一','二','三','四','五','六');

  //------------------------------------------------- start table, caption
  $output  = "<table class="" . $calendar_class . ""> ";
  $output .= "<caption>" . ucfirst(strftime("%b %y", $month_start_date)) . "</caption> ";
  
  $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 .= "<col class="" . strtolower($localized_day_name) ."" /> ";
   $th .= " <th title="" . ucfirst($localized_day_name) ."">" . strtoupper($localized_day_name{0}) ."</th> ";
   $j = ( $j == 7 )? 0 : $j;
  }
  
  //------------------------------------------------------- markup columns
  $output .= $col;
  
  //----------------------------------------------------------- table head
  $output .= "<thead> ";
  $output .= "<tr> ";
  
  $output .= $th;
  
  $output .= "</tr> ";
  $output .= "</thead> ";
  
  //---------------------------------------------------------- start tbody
  $output .= "<tbody> ";
  $output .= "<tr> ";   

   echo '<tr>';
   for($i=0; $i<count($week); $i++)
    echo '<th class="fontb">'.$week[$i].'</th>';

 

   echo '</tr>';
  }

 

  private function daysList(){
   echo '<tr>';
   //输出空格(当前菊序中后天前边要空出来)
   for($j=0; $j<$this->start_weekday; $j++)
    echo '<td> </td>';

 

   for($k=1; $k<=$this->days; $k++){
    $j++;
    if($k==date('d'))
     echo '<td class="fontb">'.$k.'</td>';
    else
     echo '<td>'.$k.'</td>';

 代码如下

    if($j%7==0)
     echo '</tr><tr>';

  //---------------------------------------------- initialize week counter
  $weeks = 1;
  
  //--------------------------------------------------- pad start of month
  
  //------------------------------------ adjust for week start on saturday
  for($i=1;$i<=$prepend;$i++){
   $output .= " <td class="pad"> </td> ";
  }
  
  //--------------------------------------------------- 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 .= "<tr> ";
   }
   
   //-------------- 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 .= " <td" . $day_class . " title="" . ucwords(strftime("%a, %b %e, %y", strtotime($day_date))) . "">";
   
   //----------------------------------------- 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 .= "<a href="" . $this->link_to . "?date=" . $day_date . "">" . $day . "</a>";
     } else {
      $output .= "<a href="" . strftime($this->formatted_link_to, strtotime($day_date)) . "">" . $day . "</a>";
     }
    break;     

   }

 

   //后边多少个空格
   while($j%7!==0){
    echo '<td> </td>';
    $j++;
   }

 

   echo '</tr>';
  }

 

  private function prevYear($year, $month){
   $year=$year-1;

 代码如下

   if($year < 1970)
    $year = 1970;

    case 2 :
     if( is_array($this->highlighted_dates) ){
      if( in_array($day_date, $this->highlighted_dates) ){
       if( empty($this->formatted_link_to) ){
        $output .= "<a href="" . $this->link_to . "?date=" . $day_date . "">";
       } else {
        $output .= "<a href="" . strftime($this->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 .= "</a>";
       } else {
        $output .= "</a>";
       }
      }
     }
    break;
   }
   
   //------------------------------------------------- close table cell
   $output .= "</td> ";
   
   //------- if this is the last cell, end the row and reset cell count
   if( $cell == 7 ){
    $output .= "</tr> ";
    $cell = 0;
   }
   
  }
  
  //----------------------------------------------------- pad end of month
  if( $cell > 1 ){
   for($i=$cell;$i<=7;$i++){
    $output .= " <td class="pad"> </td> ";
   }
   $output .= "</tr> ";
  }
  
  //--------------------------------------------- close last row and table
  $output .= "</tbody> ";
  $output .= "</table> ";
  
  //--------------------------------------------------------------- return
  return $output;
  
 }
 
}

   return "year={$year}&month={$month}"; 
  }

//调用日期生成类的措施

  private function prevMonth($year, $month){
   if($month == 1) {
    $year = $year -1;

 代码如下

    if($year < 1970)
     $year = 1970;

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

    $month=12;
   }else{
    $month--;
   }

   return "year={$year}&month={$month}"; 
  }

  private function nextYear($year, $month){
   $year = $year + 1;

   if($year > 2038)
    $year = 2038;

   return "year={$year}&month={$month}"; 
  }

  private function nextMonth($year, $month){
   if($month==12){
    $year++;

    if($year > 2100)
     $year=2100;

    $month=1;
   }else{
    $month++;
   }    

   return "year={$year}&month={$month}"; 
  }

  private function chageDate($url=""){
   echo '<tr>';
   echo '<td><a href="?'.$this->prevYear($this->year, $this->month).'">'.'<<'.'</a></td>';
   echo '<td><a href="?'.$this->prevMonth($this->year, $this->month).'">'.'<'.'</a></td>';
   echo '<td colspan="3">';
   echo '<form>';
   echo '<select name="year" onchange="window.location=''.$url.'?year='+this.options[selectedIndex].value+'&month='.$this->month.''">';
   for($sy=1970; $sy <= 2100; $sy++){
    $selected = ($sy==$this->year) ? "selected" : "";
    echo '<option '.$selected.' value="'.$sy.'">'.$sy.'</option>';
   }
   echo '</select>';
   echo '<select name="month"  onchange="window.location=''.$url.'?year='.$this->year.'&month='+this.options[selectedIndex].value">';
   for($sm=1; $sm<=12; $sm++){
    $selected1 = ($sm==$this->month) ? "selected" : "";
    echo '<option '.$selected1.' value="'.$sm.'">'.$sm.'</option>';
   }
   echo '</select>';
   echo '</form>'; 
   echo '</td>';

   echo '<td><a href="?'.$this->nextYear($this->year, $this->month).'">'.'>>'.'</a></td>';
   echo '<td><a href="?'.$this->nextMonth($this->year, $this->month).'">'.'>'.'</a></td>';
   echo '</tr>';
  }

 }
?>  

 test.php

 

复制代码 代码如下:

 <style>
 table {
  border:1px solid #050;
 }

 .fontb {
  color:white;
  background:blue;
 }  

 th {
  width:30px;
 }

 td,th {
  height:30px;
  text-align:center;

 }
 form {
  margin:0px;
  padding:0px;
 }
</style>
<?php
 include "calendar.class.php";

 $calendar=new Calendar;

 $calendar->out();
?>  

您可能感兴趣的稿子:

  • php+mysql+jquery完结日历签到作用
  • PHP轻易日历完成格局
  • PHP达成的轻便日历类
  • 八个比较不利的PHP日历类共享
  • php+javascript的日历控件
  • PHP 轻巧日历实当代码
  • php日历[测验通过]
  • php下完结阳历日历的代码
  • thinkPHP+PHPExcel达成读取文件日期的不二等秘书籍(含时分秒)
  • ThinkPHP多表联合查询的常用方法
  • Thinkphp模板中截取字符串函数简单介绍
  • ThinkPHP实现好多据库连接的化解方法
  • 基于ThinkPHP完毕的日历功用实例详解

本文由大发体育娱乐在线发布于关于计算机,转载请注明出处:php完美的日期日历生成类,php日历制作代码分享

关键词:

最火资讯