用PHP编写一个简单的日历
作者:黑马
日历的作用可能不仅仅向访客显示历法信息,在写博成风的互联网环境之下,日历有它更为广泛的用途。网站站长当然可以引用别人的日历代码,但写出有自己风格的日历,或许更能与自己的网站相对称。以下思路和解决方案向诸位提供的是一个核心的、基本的方法。
一般的,用表格来装载日历比较容易规范化输出日历信息。为此,表格如何写首先是写日历的研究对象:这个表格将随着不同的年、月、日而动态变化,换言之,年月日的构成规律决定表格应有多少行。
我们知道,PHP里,date()函数能判断当前月的天数,这是一个很宝贵的“已知条件”:date("t")。当前月的第一天是星期几决定当前月第一天写在表格的哪一个单元格,因此,必须计算出当前月的第一天是星期几,我们可以使用date()函数结合mktime()函数取得:date("w",mktime(0,0,0,月份,1,年份)。
接着就可以计算表格应该有多少行了:ceil((当前月天数+第一天是星期几的数值)/7)。
以下是详细代码,代码提供详尽的注释:
$mdays=date("t"); //当月总天数
$datenow=date("j"); //当日日期
$monthnow=date("n"); //当月月份
$yearnow=date("Y"); //当年年份
//计算当月第一天是星期几
$wk1st=date("w",mktime(0,0,0,$monthnow,1,$yearnow));
$trnum=ceil(($mdays+$wk1st)/7); //计算表格行数
//以下是表格字串
$tabstr="<table border=\"1\" width=\"600\" align=\"center\"><tr><td align=\"center\">日</td><td align=\"center\">一</td><td align=\"center\">二</td><td align=\"center\">三</td><td align=\"center\">四</td><td align=\"center\">五</td><td align=\"center\">六</td></tr>";
for($i=0;$i<$trnum;$i++) {
$tabstr.="<tr>";
for($k=0;$k<7;$k++) { //每行七个单元格
$tabidx=$i*7+$k; //取得单元格自身序号
//若单元格序号小于当月第一天的星期数($wk1st)或大于(月总数+$wk1st)
//只填写空格,反之,写入日期
($tabidx<$wk1st or $tabidx>$mdays+$wk1st-1) ? $dayecho=" " : $dayecho=$tabidx-$wk1st+1;
//突出标明今日日期
if($dayecho==$datenow) $dayecho="<span style=\"background-color:red;color:#fff;\">$dayecho</span>";
$tabstr.="<td align=\"center\">$dayecho</td>";
}
$tabstr.="</tr>";
}
$tabstr.="</table>";
print $tabstr; //输出日历
运行以上代码,得到的是当前月的日历。要扩展它使之成为一个“万年历”类型的东东,我们还需要做一些更为细致的工作,同时,表格的外观及至整个页面的样式也需要详加修饰。
日历样式演示 >> PHP万年历
【 文章来源 本站原创[2008.3.20] 转载请注明出处与作者等信息 】
网 |

