掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網(wǎng)交流
使用過Discuz的朋友都會知道dz的時間顯示出來不都是標準時間,比如我們發(fā)一篇帖子,里面的時間可能包含了多少秒前、多少分鐘前、幾個小時前、幾天前等等。那么是為什么會這樣顯示,而不是直接顯示標準的具體的時間呢,那就是因為dz在內(nèi)部增加了一個時間處理方法dgmdate().
至于在這里了解這個方法有什么用?我認為不管是做Discuz開發(fā)的,還是使用DZ的網(wǎng)站運營人員都有用處。對于開發(fā)者而言如果需要實現(xiàn)跟DZ本身模塊相同的時間顯示風格,我們不需要自己想半天來寫一個這樣的方法,而直接調(diào)用即可。對于運營者來說我們可以了解這個時間到底是被怎么樣處理的。好了首先我們就貼出那個函數(shù)的全部代碼吧:
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); } }
前面的今天在這里就不去看,主要看中間的IF判斷。從中我們可以看得出,這里的判斷主要分兩種大的情況,然后再來依次來分小的情況來處理。
如果被保存的時間是大于今天零點(也就是今天的00:00以后被保存的),就是第一種情況。這個時候再次進行判斷,如果時間差(當前時間-被保存的時間)大于3600s就以這個時間除以3600取整為多少小時前;如果是大于1800小于等于3600就是顯示半小時前;如果是是大于60小于等于1800就進行除以60再取整,得到的數(shù),久違多少分鐘前,如果是大于0小于等于60就直接顯示多少秒前。如果等于0,就顯示剛剛。除此之外就顯示原始時間。
如果被保存時間是今天以前。那么就以今天零點那個時間減去被保存的時間,然后再用這個時間去除以24*3600,得到結(jié)果后取整,如果小于7.就再次進行判斷,如果這個值為0,就顯示昨天,如果這個值為1,就顯示前天(比如說昨天中午12點的帖子就是顯示昨天),否則及顯示幾天前。如果這個時間大于等于七天,就顯示具體的時間。
我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網(wǎng)交流