Discuz时间处理函数dgmdate()的简单说明 [复制链接]

moqu8 2017-10-4

5 0

使用过Discuz的朋友都会知道dz的时间显示出来不都是标准时间,比如我们发一篇帖子,里面的时间可能包含了多少秒前、多少分钟前、几个小时前、几天前等等。那么是为什么会这样显示,而不是直接显示标准的具体的时间呢,那就是因为dz在内部增加了一个时间处理方法dgmdate().

至于在这里了解这个方法有什么用?我认为不管是做Discuz开发的,还是使用DZ的网站运营人员都有用处。对于开发者而言如果需要实现跟DZ本身模块相同的时间显示风格,我们不需要自己想半天来写一个这样的方法,而直接调用即可。对于运营者来说我们可以了解这个时间到底是被怎么样处理的。好了首先我们就贴出那个函数的全部代码吧:

  1. function dgmdate($timestamp, $format = 'dt', $timeoffset = '9999', $uformat = '') {
  2. global $_G;
  3. $format == 'u' && !$_G['setting']['dateconvert'] && $format = 'dt';
  4. static $dformat, $tformat, $dtformat, $offset, $lang;
  5. if($dformat === null) {
  6. $dformat = getglobal('setting/dateformat');
  7. $tformat = getglobal('setting/timeformat');
  8. $dtformat = $dformat.' '.$tformat;
  9. $offset = getglobal('member/timeoffset');
  10. $sysoffset = getglobal('setting/timeoffset');
  11. $offset = $offset == 9999 ? ($sysoffset ? $sysoffset : 0) : $offset;
  12. $lang = lang('core', 'date');
  13. }
  14. $timeoffset = $timeoffset == 9999 ? $offset : $timeoffset;
  15. $timestamp += $timeoffset * 3600;
  16. $format = empty($format) || $format == 'dt' ? $dtformat : ($format == 'd' ? $dformat : ($format == 't' ? $tformat : $format));
  17. if($format == 'u') {
  18. $todaytimestamp = TIMESTAMP - (TIMESTAMP + $timeoffset * 3600) % 86400 + $timeoffset * 3600;
  19. $s = gmdate(!$uformat ? $dtformat : $uformat, $timestamp);
  20. $time = TIMESTAMP + $timeoffset * 3600 - $timestamp;
  21. if($timestamp >= $todaytimestamp) {
  22. if($time > 3600) {
  23. $return = intval($time / 3600).' '.$lang['hour'].$lang['before'];
  24. } elseif($time > 1800) {
  25. $return = $lang['half'].$lang['hour'].$lang['before'];
  26. } elseif($time

最新回复 (0)
返回
支持中心
邮箱:winkill2012@qqcom
新站优化中!部分功能尚未完善,敬请谅解!
支持中心