本来想在哈罗cq论坛发帖问问关于上面这两个函数显示时间有问题的原因,可想想又算了,也不一定有准确的回答。自己百度看看吧,看能不能找到答案。于是,在网上看,最后找到这样一条:
php 时间问题 date() getdate() time() 时间误差
php时间问题date()getdate()time()实际当前时间是2012/1/422:25echodate("Y-m-dh:i:s");结果是2012-01-04-10:01:52(与实际时间偏差近12小时)但是$arr=getdate(time())echo$arr['y'].$...展开
PHP默认时区设置是会导致时间误差的,你在运行这些函数之前,先调用一个函数即可: date_default_timezone_set('Etc/GMT-8'); 这个时区误差只是在时间上的误差,日期误差一般不大,所以你输出的年,月,日都是相同的。
看到最后,说年月日都是相同的,怎么我这里就不一样啊。
再回头看我写的代码,“$lasttime = date('Y-m-d',$behavior['lastday']);”忽然想到输出:这样的格式只输出年月日。修改下,改为“$lasttime = date('Y-m-d
H:i:s',$behavior['lastday']);”这样就能输出具体的时间了。保存文件,刷新勋章中心页面显示为“2021-09-12 16:00:00”,怎么是前一天的16点呢?
再看get_date()函数的“$lasttime = get_date($behavior['lastday'],'Y-m-d H:i:s');”显示为“2021-09-13 00:00:00”,这才是正确的时间。那跟date()函数怎么差8个小时呢?想想,应该可能就是时区问题吧,只是我感觉不应该啊。
既然时间已经能正确显示,并且也大概知道了原因。只是,经过测试,我并不想显示最后发表主题的日期了,显示过去几天了更好些。修改代码后,显示如:“恭喜获得原创达人勋章(距离上次发主题已过去5天,到昨天剩余:27)”,我觉得这样不错。
$nowhave = ($pastday > 0)? '<span class="s3">(距离上次发主题已过去'.$pastday.'天,到昨天剩余:'.$shengyu.')</span>' : '<span class="s4">(今天已发主题,连续主题天数:'.$num.')</span>';
这是最后的修改代码,里面加了两个样式,以区分今天发和没发主题。