免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1411 | 回复: 2
打印 上一主题 下一主题

一个始终指向当天00:00的时间类 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-05-16 03:08 |只看该作者 |倒序浏览
是Pob论坛项目中做统计用的一个子类,在Pob发布以前提前共享一下:)

  1. <?php

  2. /******************************************************************************\
  3. *
  4. * File                        Timer.php
  5. * @author                bighan <see-me@21cn.com>;
  6. * @package                System
  7. * @version                1.0.0
  8. * @date                2004/04/23 18:42:37
  9. *
  10. \******************************************************************************/

  11. class Timer
  12. {
  13.         var $zero;
  14.         var $scale                = 6;

  15.         var $start;
  16.         var $expiry;
  17.         var $advance;

  18.         function __construct($scale = 6)
  19.         {
  20.                 $this->;zero = $this->;getZero();
  21.                 $this->;scale = abs((int)$scale);
  22.         }
  23.         function &newInstance($scale = 6)
  24.         {

  25.                 $instance =& getInstance('timer');
  26.                 if (!is_object($instance)) {
  27.                         $instance =& new Timer($scale);
  28.                         if (!XMD_ZE2) {
  29.                                 $instance->;__construct($scale);
  30.                                 setInstance($instance);
  31.                         }
  32.                         return $instance;
  33.                 }
  34.                 return $instance;

  35.         }
  36.         function getZero()
  37.         {
  38.                 $date = getdate();
  39.                 $timer = mktime(0, 0, 0, $date['mon'], $date['mday'] , $date['year'], 0);
  40.                 //$date = time();
  41.                 //$timer = mktime(0, 0, 0, date('m', $date), date('d', $date) , date('y', $date), 0);
  42.                 return $timer;
  43.         }
  44.         function elapse($now = NULL)
  45.         {
  46.                 if (is_null($now)) $now = $this->;floatMicroTime();
  47.                 if (extension_loaded('bcmath')) {
  48.                         return bcsub($now, $this->;zero, $this->;scale);
  49.                 } else {
  50.                         return sprintf("%.{$this->;$scale}f", ($now - $this->;zero));
  51.                 }
  52.         }
  53.         function setExpiry($time)
  54.         {
  55.                 $this->;start = $this->;elapse();
  56.                 $this->;expiry = $time;
  57.         }
  58.         function setAdvance($time)
  59.         {
  60.                 $this->;advance = $time;
  61.         }
  62.         function timeout()
  63.         {
  64.                 if (isset($this->;expiry)) {
  65.                         $elapsed = $this->;elapse() - $this->;start;
  66.                         $total = $this->;expiry + $this->;advance;
  67.                         $total = sprintf("%.0{$this->;scale}f", $total);
  68.                         if ($elapsed >; $total) {
  69.                                 return $elapsed;
  70.                         } else {
  71.                                 return FALSE;
  72.                         }
  73.                 }
  74.                 return TRUE;
  75.         }
  76.         function floatMicroTime()
  77.         {
  78.                 //if (PHP_VERSION >;= '4.0.4') {
  79.                 //        $time = array_sum(explode(" ",microtime()));
  80.                 //} else {
  81.                         list($usec, $sec) = explode(" ",microtime());
  82.                         $time = (float)$usec + (float)$sec;
  83.                 //}
  84.                 return $time;
  85.         }
  86. }

  87. /**
  88. * @example
  89. * $timer =& new Timer();
  90. * $timer->;setExpiry(0.1);
  91. * for ($i = 0; $i < 100000000000000; $i++) {
  92.                 if (!($t = $timer->;timeout())) {
  93.                         echo "This run num: ", $i, "<br \>;\n";
  94.                 } else {
  95.                         echo "for end! use time: ", $t, "<br \>;\n";
  96.                 }
  97.         }
  98. */

  99. ?>;
复制代码

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2004-05-16 10:03 |只看该作者

一个始终指向当天00:00的时间类

干净,清晰。
但我有两个问题:
1、这个类的用途是什么?
2、为什么没有注释?(我能看懂,但还是要说。我学写代码,老师最常教育我的就是程序要有好的注释。当然,如果这个东西只是让高手看的,就当我没问。)看别人写的没有注释的代码是一件并不好受的事情。

论坛徽章:
0
3 [报告]
发表于 2004-05-16 18:55 |只看该作者

一个始终指向当天00:00的时间类

始终指向当天的00:00,主要是方便做每天的统计使用的。

我看到不少论坛用“最近24小时发贴数”取代“今天发贴数”,这两者不是一个概念,感觉还是每天一次的统计比较合理。这个类由此而来,是我同事做的,他很少在代码里加注释的,除非比较大的东西,大概也形成一个习惯了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP