您的位置:首页 > 编程语言 > PHP开发

php实现一个日历类

2009-10-26 21:38 357 查看
<?php
 date_default_timezone_set("Etc/GMT-8");
 header("content-type:text/html; charset=utf-8");

 /**
  * 自己定义的一个生成日历的类
  * @author 张伟灿<yuanfen860913@163.com>
  * @version 1.0.0
  *
  */
 class myCalendar
 {
  /**
   * 定义每个月多少天【不是瑞年的】
   *
   * @var array
   */
  private $howManyDayPreMonth1=array(
   1=>31,
   2=>28,
   3=>31,
   4=>30,
   5=>31,
   6=>30,
   7=>31,
   8=>31,
   9=>30,
   10=>31,
   11=>30,
   12=>31,
  );
  /**
   * 定义每个月多少天【瑞年的】
   *
   * @var array
   */
  private $howManyDayPreMonth2=array(
   1=>31,
   2=>29,
   3=>31,
   4=>30,
   5=>31,
   6=>30,
   7=>31,
   8=>31,
   9=>30,
   10=>31,
   11=>30,
   12=>31,
  );
  /**
   * 一个存放当天信息的一个数组
   *
   * @var array
   */
  private $todayInfoArray;
  /**
   * 星期中文定义
   *
   * @var array
   */ 
  private $weekName=array(
   0=>"星期天",
   1=>"星期一",
   2=>"星期二",
   3=>"星期三",
   4=>"星期四",
   5=>"星期五",
   6=>"星期六"

  );
  /**
   * 构造函数
   * 初始化数组$this->todayInfoArray;
   *
   */
  function __construct()
  {
   $this->todayInfoArray=(array)getdate();
  }
  /**
   * 判断是否是瑞年
   *
   * @param int $year
   * @return bool
   */
  function isRuiYear($year)
  {
   if($year%400==0 || ($year%4==0 && $year%100==0 ))
   {
    return true;
   }
   return false;
  }
  /**
   * 得到今天详细信息的一个数组
   *
   * @return array
   */
  function getTodayInfoArray()
  {
   return $this->todayInfoArray;
  }
  /**
   * 得到今天属于哪一年
   *
   * @return int
   */
  function getYearNow()
  {
   return $this->todayInfoArray['year'];
  }
  /**
   * 得到今天属于哪一个月
   *
   * @return int
   */
  function getMonthNow()
  {
   return $this->todayInfoArray['mon'];
  }
  /**
   * 得到今天的具体日期
   *
   * @return int
   */
  function getDayNow()
  {
   return $this->todayInfoArray['mday'];
  }
  /**
   * 今天是星期几,输出的是int类型
   *
   * @return int
   */
  function getWeekNow()
  {
   return $this->todayInfoArray['wday'];
  }
  /**
   * 今天是星期几,输出的中文的星期
   *
   * @return String
   */
  function getWeekNameNow()
  {
   return $this->weekName[$this->getWeekNow()];
  }
  /**
   * 给出年月日,算出星期几
   *
   * @param int $year
   * @param int $month
   * @param int $day
   * @return int
   */
  function getWeekFromYearMonthDay($year,$month,$day)
  {
   $timeLong=mktime(0,0,0,$month,$day,$year);
   $dayArray=getdate($timeLong);
   $weekTheDay=$dayArray['wday'];
   return $weekTheDay;
  }
  /**
   * 给出年月日,算出是星期几,注意输出的是中文的星期几
   *
   * @param int $year
   * @param int $month
   * @param int $day
   * @return int
   */
  function getWeekNameFromYearMonthDay($year,$month,$day)
  {
   return $this->weekName[$this->getWeekFromYearMonthDay($year,$month,$day)];
  }
  /**
   * 通过年月,输出格式化的的日期表格
   *
   * @param int $year
   * @param int $month
   * @return String
   */
  function getCalendarFromYearMonth($year,$month)
  {
   
   $isRuiYear=$this->isRuiYear($year);
   $yearNow=$year;
   $monthNow=$month;
   $howManyDayPreMonth=0;
   if($isRuiYear==true)
   {
    $howManyDayPreMonth=$this->howManyDayPreMonth2[$monthNow];
   }
   else
   {
    $howManyDayPreMonth=$this->howManyDayPreMonth1[$monthNow];
   }
   $str  ='<table style="border:solid 2px black;">';
   $str .='<tr><th colspan="7">'.$yearNow.'年  '.$monthNow.'月</th><tr>';
   $str .='<tr>';
   foreach ((array)$this->weekName as $key =>$value)
   {
    $str .='<td>'.$value.'</td>';
   }
   
   $howWeekTheFirstDay=$this->getWeekFromYearMonthDay($yearNow,$monthNow,1);
   
   $str .='<tr>';
   $isFirstLine=true;
   for ($i=0;$i<$howWeekTheFirstDay;$i++)
   {
    $str .='<td> </td>';
   }
   
   for ($i=1;$i<=$howManyDayPreMonth;$i++)
   {
   
    $str .='<td style="text-align:center;">'.$i.'</td>';
    if(($this->getWeekFromYearMonthDay($yearNow,$monthNow,$i)+1)%7==0)
    {
     $str .='</tr>';
    }
   }
   $str .='</table>';
   
   return $str;
  } 
  /**
   * 输出当月的格式化的日期
   *
   * @return String
   */ 
  function getCalendarCurrentMonth()
  {
   return $this->getCalendarFromYearMonth($this->getYearNow(),$this->getMonthNow());
  }
  /**
   * 输出当年的格式化的日期
   *
   * @return String
   */
  function getCalendarCurrentYear()
  {

   for($i=1;$i<=12;$i++)
   {   
    $str .=$this->getCalendarFromYearMonth($this->getYearNow(),$i); 
   }
   return $str;
  }  
 }
 $myCalendar=new myCalendar();
 echo $myCalendar->getCalendarCurrentYear();
?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息