php日历的高效写法

飘逸的风14年前 (2012-11-19)程序5758
标题写的吸引人了些,不过我就觉得是挺高效的,我相信
之前看到过 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>&nbsp;</td>";
        else
          echo "<td>".$day++."</td>";
    }else{
      for($i=0;$i<=6;$i++)
        if($day>$lastday)
          echo "<td>&nbsp;</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
)
文章来源:https://www.aslibra.com/blog/read.php/957.htm

相关文章

静态类什么情况下使用

黑格尔有句名言:存在即合理。以此为论据的话,静态类的使用必然有其合理性。不过物极必反,一旦代码过于依赖静态类,其劣化的解决则不可避免。这就好比罂粟作为一种草本植物,有其在药理上的价值,但如果肆无忌惮的...

提高PHP编程效率的53个要点

用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP手册中说...

PHP购物车类,简单易用,移植CodeIgniter,并进行一些优化[附带实例]

个人感觉CodeIgniter用起来方便,但有时候做电子商城网站的时候,没有使用CodeIgniter框架,但想用CodeIgniter里的购物车程序,那么就需要对其购物车类进行修改。但CodeIgn...

PHP如何设置页面最大执行过期时间

一般在上传较大的附件时,超过30秒会出现网页过期的错误页面,如何处理这个问题呢?以下是处理方法: 1、如果是自己的服务器,可以全局配置:在php.ini 中设置,默认为30秒 max_execut...

新的月份,换一个新的模板

新的月份,换一个新的模板

用了半天的时间做一个emlog模板,自己感觉还是不错的。emlog模板做起来还是很简单的!...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。