Discuz!开发之时间处理函数dgmdate()详解
来源:互联网 发布:淘宝充流量 编辑:程序博客网 时间:2024/05/22 01:50
使用过Discuz!的朋友都会知道Discuz!的时间可以显示成多少秒前、多少分钟前、几个小时前、几天前等等,而不是单纯的显示标准时间,这样的时间显示方式就更显得人性化了!
那么Discuz!是如何处理这个个性化时间显示的呢,我们来看看Discuz!时间处理函数dgmdate()
定义文件:
\source\function\function_core.php
相关代码:
/** * 格式化时间 * @param $timestamp - 时间戳 * @param $format - dt=日期时间 d=日期 t=时间 u=个性化 其他=自定义 * @param $timeoffset - 时区 * @return string */ function dgmdate($timestamp, $format = 'dt', $timeoffset = '9999', $uformat = '') {global $_G;$format == 'u' && !$_G['setting']['dateconvert'] && $format = 'dt';static $dformat, $tformat, $dtformat, $offset, $lang;if($dformat === null) {$dformat = getglobal('setting/dateformat');$tformat = getglobal('setting/timeformat');$dtformat = $dformat.' '.$tformat;$offset = getglobal('member/timeoffset');$sysoffset = getglobal('setting/timeoffset');$offset = $offset == 9999 ? ($sysoffset ? $sysoffset : 0) : $offset;$lang = lang('core', 'date');}$timeoffset = $timeoffset == 9999 ? $offset : $timeoffset;$timestamp += $timeoffset * 3600;$format = empty($format) || $format == 'dt' ? $dtformat : ($format == 'd' ? $dformat : ($format == 't' ? $tformat : $format));if($format == 'u') {$todaytimestamp = TIMESTAMP - (TIMESTAMP + $timeoffset * 3600) % 86400 + $timeoffset * 3600;$s = gmdate(!$uformat ? $dtformat : $uformat, $timestamp);$time = TIMESTAMP + $timeoffset * 3600 - $timestamp;if($timestamp >= $todaytimestamp) {if($time > 3600) {$return = intval($time / 3600).' '.$lang['hour'].$lang['before'];} elseif($time > 1800) {$return = $lang['half'].$lang['hour'].$lang['before'];} elseif($time > 60) {$return = intval($time / 60).' '.$lang['min'].$lang['before'];} elseif($time > 0) {$return = $time.' '.$lang['sec'].$lang['before'];} elseif($time == 0) {$return = $lang['now'];} else {$return = $s;}if($time >=0 && !defined('IN_MOBILE')) {$return = '<span title="'.$s.'">'.$return.'</span>';}} elseif(($days = intval(($todaytimestamp - $timestamp) / 86400)) >= 0 && $days < 7) {if($days == 0) {$return = $lang['yday'].' '.gmdate($tformat, $timestamp);} elseif($days == 1) {$return = $lang['byday'].' '.gmdate($tformat, $timestamp);} else {$return = ($days + 1).' '.$lang['day'].$lang['before'];}if(!defined('IN_MOBILE')) {$return = '<span title="'.$s.'">'.$return.'</span>';}} else {$return = $s;}return $return;} else {return gmdate($format, $timestamp);}}
我们看到上面中有一大段是对于$format == 'u'的处理,也就是显示个性化时间:
1、如果被保存的时间是大于今天零点,这个时候如果时间差大于3600s就以这个时间除以3600取整显示为多少小时前;如果是大于1800小于等于3600就是显示半小时前;如果是是大于60小于等于1800就进行除以60再取整,得到的数为多少分钟前,如果是大于0小于等于60就直接显示多少秒前。如果等于0,就显示刚刚。
2、如果被保存时间是今天以前。主要分7天以前、昨天、前天、N天前几种情况显示。如果这个时间大于等于7天,就显示具体的时间。
0 0
- Discuz!开发之时间处理函数dgmdate()详解
- Discuz!开发之字符串处理函数dhtmlspecialchars介绍
- Discuz!开发之HTML转Discuz代码(bbcode)函数html2bbcode()
- Discuz!开发之全局变量$_G详解
- Discuz!开发之全局变量$_G详解
- Discuz开发之function_core常用函数解析
- Discuz!教程之帖子摘要(简介)截取函数messagecutstr()详解
- Discuz函数之daddslashes
- Discuz!开发之文件加载路径函数libfile()介绍
- Discuz!开发之js弹出框函数showDialog介绍
- Discuz!开发之私信、提醒信息发送函数sendpm()解析
- Discuz!开发之判断蜘蛛(机器人)访问函数checkrobot()介绍
- Discuz!开发之核心加密解密函数authcode()介绍
- Discuz!开发之网站后台表单生成函数showsetting()详情
- Discuz!开发之网站后台消息提醒函数cpmsg()介绍
- Discuz!开发之后台面包屑导航生成函数shownav()介绍
- MySQL之日期时间处理函数
- Discuz! X lang 函数参数详解
- 前端常用代码
- Unity使用sql Server问题汇总
- 学习retrofit,有你就够了
- .net 工作流引擎 WikeFlow
- @ResponseBody作用
- Discuz!开发之时间处理函数dgmdate()详解
- ContentProvider源码分析(原)
- SQL关键字
- LCD及FrameBuffer驱动(一)---------------TFT LCD 的 vsync,hsync,hspw,hbpd,hfpd, vspw,vbpd, vfpd 等参数的理解
- 【cc2541历程】流水灯
- 理解java阻塞队列BlockingQueue
- 编译libpcap和tcpdump
- 3. Longest Substring Without Repeating Characters
- Eclipse中Java文件图标由实心J变成空心J的问题