php日历的高效写法
标题写的吸引人了些,不过我就觉得是挺高效的,我相信
之前看到过 irlvirus 写的 《php练习代码-日历》,我觉得效率都不是很好。
date()函数结合mktime() 可以得到一切东西,技巧问题
我觉得灵活运用两者即可得到日历了,说的没有用,还是写一下可以证明
于是乎有兴趣写一下,希望分享给大家
程序测试过,是比帖子里提到的快,不知道是否我的机器的问题,也希望大家做个比较,交流一下
下面贴一下代码,包含测试代码在里面,应用可以去掉测试代码
得到的测试结果是:
Array
(
[0] => 0.00038400000000005
[1] => 0.00030999999999998
[2] => 0.00029699999999999
[3] => 0.000303
[4] => 0.00030399999999997
[5] => 0.00034499999999998
[6] => 0.00032300000000002
[7] => 0.00033
[8] => 0.00032699999999997
[9] => 0.00032000000000004
)
文章来源:https://www.aslibra.com/blog/read.php/957.htm
之前看到过 irlvirus 写的 《php练习代码-日历》,我觉得效率都不是很好。
date()函数结合mktime() 可以得到一切东西,技巧问题
我觉得灵活运用两者即可得到日历了,说的没有用,还是写一下可以证明
于是乎有兴趣写一下,希望分享给大家
程序测试过,是比帖子里提到的快,不知道是否我的机器的问题,也希望大家做个比较,交流一下
下面贴一下代码,包含测试代码在里面,应用可以去掉测试代码
<?
@date_default_timezone_set('RPC');
function show_calender(){
//code by hqlulu
//date:2007-12-12
//web: https://www.aslibra.com
$starttime=microtime();
//处理请求日期
$y= isset($_GET["y"]) ? intval($_GET["y"]) : date("Y");
$m= isset($_GET["m"]) ? intval($_GET["m"]) : date("m");
if($m<1 || $m>12)$m=date("m");
if($y<=0)$y=date("Y");
//下个月
$nm=$m+1;
if($nm>12){
$nm=1;
$ny=$y+1;
}else{
$ny=$y;
}
//前一月
$pm=$m-1;
if($pm<1){
$pm=12;
$py=$y-1;
}else{
$py=$y;
}
//获取本月名称
$month = date("M",mktime(0, 0, 0, $m, 1, $y));
//获取本月最后一天
$lastday = date("d",mktime(0, 0, 0, $nm, 0, $ny));
//获取开始一天的星期几
$index = date("w",mktime(0, 0, 0, $m, 1, $y));
//生成日历头
echo "<table>\n<thead><tr><th colspan='1'><a href='?y={$py}&m={$pm}'>-</a></th><th colspan='5'> {$y} {$month} </th><th colspan='1'><a href='?y={$ny}&m={$nm}'>+</a></th></tr><thead>\n<tbody><tr><td>日</td><td>一</td><td>二</td><td>三</td><td>四</td><td>五</td><td>六</td></tr>";
//处理日历
$row=0;
$day=1;
while(1){
echo "<tr>";
if($row==0){
for($i=0;$i<=6;$i++)
if($i<$index)
echo "<td> </td>";
else
echo "<td>".$day++."</td>";
}else{
for($i=0;$i<=6;$i++)
if($day>$lastday)
echo "<td> </td>";
else
echo "<td>".$day++."</td>";
}
echo "</tr>";
$row++;
if($day>$lastday)break;
}
echo "</table>";
$endtime=microtime();
$usedtime=$endtime-$starttime;
return $usedtime;
}
$run_info=array();
for($i=0;$i<10;$i++)
$run_info[]=show_calender();
print_r($run_info);
?>
@date_default_timezone_set('RPC');
function show_calender(){
//code by hqlulu
//date:2007-12-12
//web: https://www.aslibra.com
$starttime=microtime();
//处理请求日期
$y= isset($_GET["y"]) ? intval($_GET["y"]) : date("Y");
$m= isset($_GET["m"]) ? intval($_GET["m"]) : date("m");
if($m<1 || $m>12)$m=date("m");
if($y<=0)$y=date("Y");
//下个月
$nm=$m+1;
if($nm>12){
$nm=1;
$ny=$y+1;
}else{
$ny=$y;
}
//前一月
$pm=$m-1;
if($pm<1){
$pm=12;
$py=$y-1;
}else{
$py=$y;
}
//获取本月名称
$month = date("M",mktime(0, 0, 0, $m, 1, $y));
//获取本月最后一天
$lastday = date("d",mktime(0, 0, 0, $nm, 0, $ny));
//获取开始一天的星期几
$index = date("w",mktime(0, 0, 0, $m, 1, $y));
//生成日历头
echo "<table>\n<thead><tr><th colspan='1'><a href='?y={$py}&m={$pm}'>-</a></th><th colspan='5'> {$y} {$month} </th><th colspan='1'><a href='?y={$ny}&m={$nm}'>+</a></th></tr><thead>\n<tbody><tr><td>日</td><td>一</td><td>二</td><td>三</td><td>四</td><td>五</td><td>六</td></tr>";
//处理日历
$row=0;
$day=1;
while(1){
echo "<tr>";
if($row==0){
for($i=0;$i<=6;$i++)
if($i<$index)
echo "<td> </td>";
else
echo "<td>".$day++."</td>";
}else{
for($i=0;$i<=6;$i++)
if($day>$lastday)
echo "<td> </td>";
else
echo "<td>".$day++."</td>";
}
echo "</tr>";
$row++;
if($day>$lastday)break;
}
echo "</table>";
$endtime=microtime();
$usedtime=$endtime-$starttime;
return $usedtime;
}
$run_info=array();
for($i=0;$i<10;$i++)
$run_info[]=show_calender();
print_r($run_info);
?>
得到的测试结果是:
引用
Array
(
[0] => 0.00038400000000005
[1] => 0.00030999999999998
[2] => 0.00029699999999999
[3] => 0.000303
[4] => 0.00030399999999997
[5] => 0.00034499999999998
[6] => 0.00032300000000002
[7] => 0.00033
[8] => 0.00032699999999997
[9] => 0.00032000000000004
)