zoukankan      html  css  js  c++  java
  • Discuz!开发之时间处理函数dgmdate()详解

       

    使用过Discuz!的朋友都会知道Discuz!的时间可以显示成多少秒前、多少分钟前、几个小时前、几天前等等,而不是单纯的显示标准时间,这样的时间显示方式就更显得人性化了!
     
    那么Discuz!是如何处理这个个性化时间显示的呢,我们来看看Discuz!时间处理函数dgmdate()
     
    定义文件:
      
    sourcefunctionfunction_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天,就显示具体的时间。
      演示地址:http://bbs.yuanzhumuban.cc/
  • 相关阅读:
    NTP on FreeBSD 12.1
    Set proxy server on FreeBSD 12.1
    win32 disk imager使用后u盘容量恢复
    How to install Google Chrome Browser on Kali Linux
    Set NTP Service and timezone on Kali Linux
    Set static IP address and DNS on FreeBSD
    github博客标题显示不了可能是标题包含 特殊符号比如 : (冒号)
    server certificate verification failed. CAfile: none CRLfile: none
    删除文件和目录(彻底的)
    如何在Curl中使用Socks5代理
  • 原文地址:https://www.cnblogs.com/68xi/p/11596449.html
Copyright © 2011-2022 走看看