zhangjingyu
基本就是上面的这样了。说点儿其它的吧。
lib/user/behaviorservice.class.php
/**
* 记录一个行为
* @param int $uid
* @param string $behavior
* @param int $lasttime
* @param bool $clear 未连续时清零
* @return array($num,$change)
*/
function doBehavior($uid,$behavior,$lasttime=0,$clear = false) {
global $tdtime;
$uid = (int) $uid;
$behavior = $this->_initBehavior($behavior);
if (!$behavior || !$uid) return array(false,'数据有误');
if ($lasttime && $lasttime>$tdtime) array(false,'无需操作');
$statistic = $this->getBehaviorStatistic($uid, $behavior);
if (!$statistic) {
$this->addBehaviorStatistic(array('uid'=>$uid,'behavior'=>$behavior,'lastday'=>$tdtime,'num'=>1));
//$this->addBehaviorLog($uid, $behavior, 1);
return array(1,1);
} else {
if ($statistic['lastday']>=$tdtime) return array($statistic['num'],0);
$changeDay = ($tdtime-$statistic['lastday'])/86400;
$change = $changeDay == 1 ? 1 : 2-$changeDay;
if ($clear) {
$newNum = $changeDay == 1 ? $statistic['num'] + 1 : 1;
} else {
$newNum = $statistic['num'] + $change;
}
if ($newNumupdateBehaviorStatistic(array('lastday'=>$tdtime,'num'=>$newNum), $uid, $behavior);
//if ($change) $this->addBehaviorLog($uid, $behavior, $change);
return array($newNum,$change);
}
}//2021.9.16
$pastday = ($tdtime - $behavior['lastday'])/86400;
$shengyu = $num - $pastday +1;//截止到昨天的剩余天数上面是这个文件最前面的一个完整函数。下面是我自己写的,没有参考其它文件。可以看出$pastday和第23行的代码基本一致,$shengyu和28,24行的代码基本一致——我的“剩余”是累计到昨天,今天是加还是减没有算(取决于有没有发主题),所以是+1。上面的代码中是+2,那是因为“今天”发主题了。这个正好是“勋章回收通知”主题里29楼我写的公式:http://www.vtu425.com/read.php?tid=4123&ds=1&page=3#87302第26行代码就是上面帖子中我说的:“我想,如果这个过去的天数等于1(也就是说昨天发新主题了,今天又发了),就在原来上次的天数上加1;”。