页:
[1]
| murder | 2004-11-22 11:13 AM |
|
【原创】一个实用日历类 Calendar v1.0
[IMG]http://www.phpclan.net/codelib/1/cal.gif[/IMG]
大家给点意见,到目前form提交日期还没有增加验证功能,大家有兴趣可以自己修改。
[URL=http://www.phpclan.net/codelib/1/caltest.php]查看演示[/URL]
[PHP]
<?php
# 实用日历类 Calendar v1.0
# 作者 : Murder.XP
# QQ :7853151
# Email : [email]Murder_XP@126.com[/email]
# Finished : 10/3/2004
###############################################
# 使 用 说 明 #
###############################################
# #
# 本程序由Murder.XP(murder_xp@126.com)设计编写,保留 #
# 最终解释权,在保留版权条件下提供对个人网站及非赢利性费网站 #
# 的免费使用权,任何对基于本程序进行的修改,删除,增加 #
# 行为都请保留本人版权信息。 #
# #
###############################################
/*
实用Calendar v1.0 类 介绍
1.可自定义样式,使用继承方式或直接修改类属性。
2.完全不用考虑用户GET变量,Calendar类自动保存传递用户GET变量。
3.日期范围 1970-2037 年。
4.用户可动态的删除,增加URL变量,提供更大灵活性。
5.提供相关方法返回各种格式日期满足用户对数据库进行操作。
6.支持直接日期跳转。
//相关用户函数
$cal->PrintCalJumper(); //输出跳转窗体
$cal->SetSpliter($spliter); //设定日历GET变量格式所用分隔符 默认为 'x' ex. 2004x10x3。
echo $cal->GetCurDateFormat(); //获取当前日期的查询格式 ex. 2004-10-03。
echo $cal->GetDateFormat($y,$m,$d) //返回指定日期的查询格式 ex. 2004-10-03。
echo $cal->GetCurYear();//返回当前年份。
echo $cal->GetCurMonth();//返回当前月份。
echo $cal->GetCurDay();//返回当前日。
$cal->AddQueryParam($strName,$strVal) //追加一个URL查询参数 ex. $strName 对应 a,$strVal 对应 1,日期更新时自动追加URL参数a=1。
$cal->ClearQueryString(); //清除所有附加查询字符串。
echo $cal->GetQueryString(); //获取附加查询字符串 ex. a=1&b=2。
//简单使用方法
include_once('Calendar.php');
$cal=new Calendar(); //定义Canlendar对象。
$cal->Display(); //显示日历
//推荐使用方法
(1)继承Calendar类
Class myCal extends Calendar
{
// 重载以下样式属性 并自定义属性值
//cal style config
var $calborder=0;
var $calbg='#EEEEEE';
var $calcellspacing=1;
var $calcellpadding=2;
var $calwidth=220;
var $headerbg='#EEEEEE';
var $headerheight=20;
var $headerfontcolor='#444444';
var $headerlinkstyle='linkheader';
var $titlebg='#CCCCCC';
var $titlefontcolor='#FFFFFF'; //星期‘日’ 默认为 红色,不可以修改
var $titlelinkstyle='linktitle'; #链接样式(外部css文件)
var $titleheight=24;
//link style
var $LinkDefault='linkdefault'; #链接样式(外部css文件)
var $LinkToday='linktoday'; #链接样式(外部css文件)
var $LinkSelect='linkselect'; #链接样式(外部css文件)
var $LinkHeaderBack='linktitle'; #链接样式(外部css文件)
var $colalign='center';
var $colbgcolor='#DDDDDD';
var $colblankcellcolor='#EEEEEE';
var $collinkstyle='linkdefault'; #链接样式(外部css文件)
var $colbgcolortoday='#CC6600';
var $colbgcolorselect='#FFFFFF';
var $jumpborder=0;
var $jumpcellbg='';
var $jumpcellspacing=0;
var $jumpcellpadding=0;
var $jumpwidth=220;
var $jumpheight=30;
var $jumpbg='';
}
定义css文件 cal.css
这里仅列举一个样式
a.linkdefault
{
font-size:14px;
font-weight:light;
text-decoration:none;
color:#000000;
}
a.linkdefault:hover
{
color:#000000;
font-size:14px;
font-style:italic;
font-weight:light;
text-decoration:underline;
}
include_once('Calendar.php');
$cal=new Calendar();
//$param_name1='a';$param_value1=1;
//$param_name2='b';$param_value2=2;
//$cal->AddQueryParam($param_name1,$param_value1);
//$cal->AddQueryParam($param_name2,$param_value2);
$cal->Display();//显示日历
echo $cal->GetCurDateFormat(); // output: 2004-10-03
$cal->PrintCalJumper();//显示跳转窗体
echo $cal->GetQueryString(); // output: a=1&b=2&
*/
Class Calendar
{
//cal vars
var $year;
var $month;
var $day;
var $DayOfMonthStart; //每月开始第一天是星期几 0-6 ,对应header: 日-六
var $CurDate;
var $err='';
var $spliter='x';
var $DaysHaveLink=Array();
var $QueryString='';
var $WeekTitle=Array('日','一','二','三','四','五','六');
var $DaysPerMonth;
//cal style config
var $calborder=0;
var $calbg='#EEEEEE';
var $calcellspacing=1;
var $calcellpadding=2;
var $calwidth=220;
var $headerbg='#EEEEEE';
var $headerheight=20;
var $headerfontcolor='#444444';
var $headerlinkstyle='linkheader';
var $titlebg='#CCCCCC';
var $titlefontcolor='#FFFFFF'; //星期‘日’ 默认为 红色,不可以修改
var $titlelinkstyle='linktitle'; //set css tagname from css file
var $titleheight=24;
//link style
var $LinkDefault='linkdefault';
var $LinkToday='linktoday';
var $LinkSelect='linkselect';
var $LinkHeaderBack='linktitle';
var $colalign='center';
var $colbgcolor='#DDDDDD';
var $colblankcellcolor='#EEEEEE';
var $collinkstyle='linkdefault';
var $colbgcolortoday='#CC6600';
var $colbgcolorselect='#FFFFFF';
var $jumpborder=0;
var $jumpcellbg='';
var $jumpcellspacing=0;
var $jumpcellpadding=0;
var $jumpwidth=220;
var $jumpheight=30;
var $jumpbg='';
//functions
function Calendar()
{
$this->CurDate=getdate();//设定当前系统日期
//设定查询字符串
if(!empty($_SERVER['QUERY_STRING']))
{
$q=explode("&",$_SERVER['QUERY_STRING']);
foreach($q as $qs)
{
$kv=explode("=",$qs);
if($kv[0]!='caldate')
{
$this->QueryString.=$qs."&";
}
}
}
if(empty($_GET['caldate']))
{
$tmpdate=getdate();
$this->year=$tmpdate['year'];
$this->month=$tmpdate['mon'];
$this->day=$tmpdate['mday'];
unset($tmpdate);
}
else
{
if($this->CheckGetDate($_GET['caldate']))
{
$tmpdate=explode($this->spliter,$_GET['caldate']);
$this->year=$tmpdate[0];
$this->month=$tmpdate[1];
$this->day=$tmpdate[2];
unset($tmpdate);
}
else
{
$this->ErrorDisplay();
}
}
$FirstDay=getdate(mktime(0,0,0,$this->month,1,$this->year));
$this->DayOfMonthStart=$FirstDay['wday']; //0-6
$this->DaysPerMonth=date("t",mktime(0,0,0,$this->month,1,$this->year));//设定当月天数
}
function CheckGetDate($caldate)
{
$td=explode($this->spliter,$caldate);
$y=$td[0];
$m=$td[1];
$d=$td[2];
$isError=false;
$cyear=intval($y);
if($cyear>2037||$cyear<1970)
{
$isError=true;
$this->err.="年份超过范围,请控制在1970-2037内。<br />";
}
if(intval($m)<1||intval($m)>12)
{
$isError=true;
$this->err.="月份设置错误!<br />";
}
if(intval($d)>31/*$this->DaysPerMonth*/||intval($d)<1)
{
// $this->DaysPerMonth=date("t",mktime(0,0,0,$this->month,1,$this->year));//设定当月天数
$isError=true;
$this->err.="日期超出范围!<br />";
}
if($isError)
{
return false;
}
else
{
return true;
}
unset($y,$m,$d,$td,$isError);
}
function PrintCalHeader()
{
echo "<table border=\"$this->calborder\" cellspacing=\"$this->calcellspacing\" cellpadding=\"$this->calcellpadding\" width=\"$this->calwidth\" bgcolor=\"$this->calbg\">\n";
//cal header,display current date (year & month)
echo "<tr>\n";
echo "<td bgcolor=\"$this->headerbg\" align=\"center\" height=\"$this->headerheight\" colspan=\"7\">";
$lastyear=$this->year-1;
$nextyear=$this->year+1;
$day=$this->day;
$UrlQueryStringLastYear=$this->QueryString."caldate=".$lastyear.$this->spliter.$this->month.$this->spliter.$this->day;
$UrlQueryStringNextYear=$this->QueryString."caldate=".$nextyear.$this->spliter.$this->month.$this->spliter.$this->day;
echo "<a href=\"".$_SERVER['PHP_SELF']."?".$UrlQueryStringLastYear."\" title=\"上一年\" class=\"$this->headerlinkstyle\"><<</a>\n";
echo "<font color=\"$this->headerfontcolor\">";
echo $this->year;
echo " </font>";
echo "<a href=\"".$_SERVER['PHP_SELF']."?".$UrlQueryStringNextYear."\" title=\"下一年\" class=\"$this->headerlinkstyle\">>></a>\n";
echo " ";
$lastmonth = $this->month - 1;
$nextmonth = $this->month + 1;
$lastyear=$this->year;
$nextyear=$this->year;
if($lastmonth<1)
{
$lastmonth=12;
$lastyear=$lastyear-1;
}
if($nextmonth>12)
{
$nextmonth=1;
$nextyear=$nextyear+1;
}
$UrlQueryStringLastMonth=$this->QueryString.$this->GetGetFormat($lastyear,$lastmonth,$this->day);
$UrlQueryStringNextMonth=$this->QueryString.$this->GetGetFormat($nextyear,$nextmonth,$this->day);
echo "<a href=\"".$_SERVER['PHP_SELF']."?".$UrlQueryStringLastMonth."\" class=\"$this->headerlinkstyle\" title=\"上一月\"><<</a>\n";
echo "<font color=\"$this->headerfontcolor\">";
echo $this->month;
echo " </font>";
echo "<a href=\"".$_SERVER['PHP_SELF']."?".$UrlQueryStringNextMonth."\" class=\"$this->headerlinkstyle\" title=\"下一月\">>></a>\n";
$backlink=$_SERVER['PHP_SELF']."?".$this->QueryString.$this->GetGetFormat($this->GetCurYear(),$this->GetCurMonth(),$this->GetCurDay());
echo "<a href=\"".$backlink."\" class=\"$this->LinkHeaderBack\" title=\"定位日历到今天\">今天</a>";
echo "</td>\n";
echo "</tr>\n";
}
//输出头部: 日 - 六
function PrintCalWeekTitle()
{
echo "<tr>\n";
for($i=0;$i<7;$i++)
{
echo "<td align=\"$this->colalign\" bgcolor=\"$this->titlebg\" height=\"$this->titleheight\">";
echo "<font color=\"";
if($i==0)
{
echo "#CC0033";
}
else
{
echo $this->titlefontcolor;
}
echo "\">";
echo $this->WeekTitle[$i];
echo "</font>";
echo "</td>\n";
}
echo "</tr>\n";
}
//打印日历表
function PrintCalBody()
{
//计算本月天数
$MonthLength=$this->DaysPerMonth;
//Print start
echo "<tr>\n";
//循环打印1号开始前的所有空格
$line=1;
$countday=1;
//打印日期开始前的空(一声)格
for($i=0;$i<$this->DayOfMonthStart;$i++)
{
echo "<td align=\"$this->colalign\" bgcolor=\"$this->colblankcellcolor\"> </td>\n";
$line++;
}
$add=7-intval($line);
//打印第一行
for($j=0;$j<$add;$j++)
{
echo "<td align=\"$this->colalign\" bgcolor=\"";
if($this->IsToday($countday,$this->month,$this->year))
{
echo $this->colbgcolortoday;
}
else if($this->day==$countday) //如果为选定日
{
echo $this->colbgcolorselect;
}
else
{
echo $this->colbgcolor;
}
echo "\">";
echo "<a href=\"".$_SERVER['PHP_SELF']."?";
echo $this->QueryString;
echo $this->GetGetFormat($this->year,$this->month,$countday);
echo "\"";
echo " class=\"";
if($this->IsToday($countday,$this->month,$this->year))
{
echo $this->LinkToday;
}
else if($this->day==$countday) //如果为选定日
{
echo $this->LinkSelect;
}
else
{
echo $this->LinkDefault;
}
echo "\" title=\"";
echo $this->GetDateFormat($this->year,$this->month,$countday);
echo "\">";
echo $countday;
echo "</a>";
echo "</td>\n";
if($line%7==0)
echo "</tr>\n<tr>\n";
$line++;
$countday++;
}
//打印日历主体
while($countday<=$MonthLength)
{
echo "<td align=\"$this->colalign\" bgcolor=\"";
if($this->IsToday($countday,$this->month,$this->year))
{
echo $this->colbgcolortoday;
}
else if($this->day==$countday) //如果为选定日
{
echo $this->colbgcolorselect;
}
else
{
echo $this->colbgcolor;
}
echo "\">";
echo "<a href=\"".$_SERVER['PHP_SELF']."?";
echo $this->QueryString;
echo $this->GetGetFormat($this->year,$this->month,$countday);
echo "\"";
echo " class=\"";
if($this->IsToday($countday,$this->month,$this->year))
{
echo $this->LinkToday;
}
else if($this->day==$countday) //如果为选定日
{
echo $this->LinkSelect;
}
else
{
echo $this->LinkDefault;
}
echo "\" title=\"";
echo $this->GetDateFormat($this->year,$this->month,$countday);
echo "\">";
echo $countday;
echo "</a>";
echo "</td>\n";
if($line%7==0)
{
echo "</tr>\n<tr>\n";
}
$line++;
$countday++;
}
//打印最后一行剩余空(一声)格
//计算最后一天是最后一个星期的第几天
$tmpdate=getdate(mktime(0,0,0,$this->month,$MonthLength,$this->year));
$DayOfLastWeek=$tmpdate['wday'];
$lastc=7-$DayOfLastWeek;
for($n=1;$n<$lastc;$n++)
{
echo "<td bgcolor=\"$this->colblankcellcolor\"> </td>\n";
}
echo "</tr></table>";
}
function PrintCalJumper()
{
echo "<table border=\"$this->jumpborder\" cellspacing=\"$this->jumpcellspacing\" cellpadding=\"$this->jumpcellpadding\" width=\"$this->jumpwidth\" bgcolor=\"$this->jumpbg\">\n";
echo "<tr>\n";
echo "<td align=\"left\" bgcolor=\"$this->jumpcellbg\" height=\"$this->jumpheight\">";
echo "<form id=\"CalJumper\" name=\"CalJumper\">";
echo "<input type=\"text\" name=\"year\" size=\"4\" maxlength=\"4\">";
echo "-";
echo "<input type=\"text\" name=\"month\" size=\"2\" maxlength=\"2\">";
echo "-";
echo "<input type=\"text\" name=\"day\" size=\"2\" maxlength=\"2\">";
echo " ";
echo "<input type=\"button\" value=\"跳转到\" onclick=\"javascript:caljump();\">";
echo "</form>";
echo "</td></tr>\n";
echo "</table>\n";
echo "<script language=\"javascript\">\n";
echo "<!--\n";
echo "function caljump()\n";
echo "{\n";
echo " location.href=\"http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']."?".$this->QueryString."\"";
echo " + \"caldate=\" + document.CalJumper.year.value + \"".$this->spliter."\" + document.CalJumper.month.value + \"".$this->spliter."\" + document.CalJumper.day.value\n";
echo "}\n";
echo "//-->\n";
echo "</script>\n";
}
function Display()
{
$this->PrintCalHeader();
$this->PrintCalWeekTitle();
$this->PrintCalBody();
}
function AddQueryParam($strName,$strVal) //追加一个URL查询参数
{
$this->QueryString.=$strName.$this->spliter.$strVal.'&';
}
function GetQueryString()
{
return $this->QueryString;
}
function ClearQueryString()
{
$this->QuertyString = Array();
}
function ErrorDisplay($errstr='') //Call your error display function here
{
//include_once('common.php');
//ShowErrorMsg($errstr);
if(empty($errstr))
{
echo $this->err;
}
else
{
echo $errstr;
}
exit;
}
/* Optional function
function IsLeapYear($y)
{
if(intval($y)%4==0)
return true;
else
return false;
}
*/
function GetCurDateFormat() //返回当前选定日期的查询格式
{
$CurYear=$this->year;
$CurMonth=($this->month > 9) ? $this->month : "0".$this->month;
$CurDay=($this->day > 9) ? $this->day : "0".$this->day;
return $CurYear."-".$CurMonth."-".$CurDay;
}
function GetDateFormat($y,$m,$d) //返回指定日期的查询格式
{
$CurYear=$y;
$CurMonth=($m > 9) ? $m : "0".$m;
$CurDay=($d > 9) ? $d : "0".$d;
return $CurYear."-".$CurMonth."-".$CurDay;
}
function GetCurYear()
{
return $this->CurDate['year'];
}
function GetCurMonth()
{
return $this->CurDate['mon'];
}
function GetCurDay()
{
return $this->CurDate['mday'];
}
function IsToday($d,$m,$y)
{
if($this->GetCurDay()==$d && $this->GetCurMonth()==$m && $this->GetCurYear()==$y)
{
return true;
}
else
{
return false;
}
}
function GetGetFormat($y,$m,$d)
{
return "caldate=".$y.$this->spliter.$m.$this->spliter.$d;
}
function SetSpliter($spliter)
{
if(empty($spliter))
{
$this->spliter='x';
}
else
{
$this->spliter=$spliter;
}
}
}
?>[/PHP] |
Powered by Discuz! Archiver 6.1.0
© 2001-2006 Comsenz Inc.
Processed in 0.007822 second(s), 2 queries |