Discuz模板|Discuz插件|Discuz教程|Discuz素材免费下载

 找回密码
 立即注册

QQ登录

只需一步,快速开始

温馨提示:本站所有DZ相关模板、插件、教程(包括DZ应用中心已下架插件、模板)所有用户可全部免费下载,无任何收费模式(不包括VIP版块非DZ资源,VIP版块需购买会员组方可下载),如本站没有您需要的插件或模板,请自行前往淘宝互站网送码网等第三方站点搜索相关插件或模板进行低价格购买下载本站非常不建议用户浪费金钱前往DZ应用中心购买。

Discuz!开发之时间处理函数dgmdate()详解

[复制链接]
tuyuanma 发表于 2021-4-20 11:00:12 | 显示全部楼层 |阅读模式
温馨提醒:禁止内容附带广告图片、二维码图片,否则将在不通知情况下永久禁言账号!
欢迎加入兔源码站长交流群,您的加入是我们前行的动力!

DZ站长建站交流群:493651246

[ 温馨提示:点击上方群文字,可快速加入QQ群 ]


使用过Discuz!的朋友都会知道Discuz!的时间可以显示成多少秒前、多少分钟前、几个小时前、几天前等等,而不是单纯的显示标准时间,这样的时间显示方式就更显得人性化了!
那么Discuz!是如何处理这个个性化时间显示的呢,我们来看看Discuz!时间处理函数dgmdate()
定义文件:
  1. \source\function\function_core.php
复制代码
相关代码:
  1. /**
  2. * 格式化时间
  3. * @param $timestamp - 时间戳
  4. * @param $format - dt=日期时间 d=日期 t=时间 u=个性化 其他=自定义
  5. * @param $timeoffset - 时区
  6. * @return string
  7. */  
  8. function dgmdate($timestamp, $format = 'dt', $timeoffset = '9999', $uformat = '') {
  9.     global $_G;
  10.     $format == 'u' && !$_G['setting']['dateconvert'] && $format = 'dt';
  11.     static $dformat, $tformat, $dtformat, $offset, $lang;
  12.     if($dformat === null) {
  13.         $dformat = getglobal('setting/dateformat');
  14.         $tformat = getglobal('setting/timeformat');
  15.         $dtformat = $dformat.' '.$tformat;
  16.         $offset = getglobal('member/timeoffset');
  17.         $sysoffset = getglobal('setting/timeoffset');
  18.         $offset = $offset == 9999 ? ($sysoffset ? $sysoffset : 0) : $offset;
  19.         $lang = lang('core', 'date');
  20.     }
  21.     $timeoffset = $timeoffset == 9999 ? $offset : $timeoffset;
  22.     $timestamp += $timeoffset * 3600;
  23.     $format = empty($format) || $format == 'dt' ? $dtformat : ($format == 'd' ? $dformat : ($format == 't' ? $tformat : $format));
  24.     if($format == 'u') {
  25.         $todaytimestamp = TIMESTAMP - (TIMESTAMP + $timeoffset * 3600) % 86400 + $timeoffset * 3600;
  26.         $s = gmdate(!$uformat ? $dtformat : $uformat, $timestamp);
  27.         $time = TIMESTAMP + $timeoffset * 3600 - $timestamp;
  28.         if($timestamp >= $todaytimestamp) {
  29.             if($time > 3600) {
  30.                 $return = intval($time / 3600).' '.$lang['hour'].$lang['before'];
  31.             } elseif($time > 1800) {
  32.                 $return = $lang['half'].$lang['hour'].$lang['before'];
  33.             } elseif($time > 60) {
  34.                 $return = intval($time / 60).' '.$lang['min'].$lang['before'];
  35.             } elseif($time > 0) {
  36.                 $return = $time.' '.$lang['sec'].$lang['before'];
  37.             } elseif($time == 0) {
  38.                 $return = $lang['now'];
  39.             } else {
  40.                 $return = $s;
  41.             }
  42.             if($time >=0 && !defined('IN_MOBILE')) {
  43.                 $return = '<span title="'.$s.'">'.$return.'</span>';
  44.             }
  45.         } elseif(($days = intval(($todaytimestamp - $timestamp) / 86400)) >= 0 && $days < 7) {
  46.             if($days == 0) {
  47.                 $return = $lang['yday'].' '.gmdate($tformat, $timestamp);
  48.             } elseif($days == 1) {
  49.                 $return = $lang['byday'].' '.gmdate($tformat, $timestamp);
  50.             } else {
  51.                 $return = ($days + 1).' '.$lang['day'].$lang['before'];
  52.             }
  53.             if(!defined('IN_MOBILE')) {
  54.                 $return = '<span title="'.$s.'">'.$return.'</span>';
  55.             }
  56.         } else {
  57.             $return = $s;
  58.         }
  59.         return $return;
  60.     } else {
  61.         return gmdate($format, $timestamp);
  62.     }
  63. }
复制代码
我们看到上面中有一大段是对于$format == 'u'的处理,也就是显示个性化时间:
1、如果被保存的时间是大于今天零点,这个时候如果时间差大于3600s就以这个时间除以3600取整显示为多少小时前;如果是大于1800小于等于3600就是显示半小时前;如果是是大于60小于等于1800就进行除以60再取整,得到的数为多少分钟前,如果是大于0小于等于60就直接显示多少秒前。如果等于0,就显示刚刚。
2、如果被保存时间是今天以前。主要分7天以前、昨天、前天、N天前几种情况显示。如果这个时间大于等于7天,就显示具体的时间。

版权声明
1、转摘或引用本站内容资源须注明原网址,并标明本站网址(兔源码www.tuyuanma.com);
2、对于转摘或引用本站内容资源而引起的民事纠纷、行政处罚或其他损失,本站不承担责任;
3、对于不遵守本声明或其他违法、恶意使用本站内容者,本站保留其追究法律责任的权利。




自动排版 | 高级模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

493651246站长邮箱:tuyuanma@qq.com 站长QQ:3197813386

© 2001-2013 本站内容皆来自互联网及用户分享,如需删除请提供软著或商标证书。

快速回复 返回顶部 返回列表