立即注册找回密码

草根资源吧

官方指定联系方式

工作时间: 周一到周五早上09:00-11:00, 下午03:00-05:00, 晚上08:30-10:30(周六、日休息)
点击这里给我发消息 点击这里给我发消息
QQ: 280520150地址:河南郑州金水区  邮箱: lianxun888@163.com

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

[复制链接]
  • TA的每日心情
    开心
    2018-7-1 22:44
  • 签到天数: 16 天

    [LV.4]偶尔看看III

    发表于 2018-5-12 16:29:47 | 显示全部楼层 |阅读模式
    使用过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天,就显示具体的时间。

    本帖最近访客
    回复

    使用道具 举报

    该用户从未签到

    发表于 2018-5-13 20:24:54 | 显示全部楼层
    真心好东西
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2018-5-15 08:04:57 | 显示全部楼层
    谢谢老大
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2018-5-18 08:47:57 | 显示全部楼层
    下载来了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-1 22:44
  • 签到天数: 16 天

    [LV.4]偶尔看看III

     楼主| 发表于 2018-5-22 12:55:24 | 显示全部楼层
    谢谢分享、、、
    回复 支持 反对

    使用道具 举报

    使用高级回帖 (可批量传图、插入视频等)

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则   Ctrl + Enter 快速发布  

    发帖时请遵守我国法律,网站会将有关你发帖内容、时间以及发帖IP地址等记录保留,只要接到合法请求,即会将信息提供给有关政府机构。
    Powered by Discuz! X3.2 豫ICP备17024477号-1   
    Copyright © 2008-2016 www.sxpxb.net All Rights Reserved.
    快速回复 返回顶部 返回列表