PHP时间戳直到“小时前”的麻烦

时间:2012-12-02 10:13:38

标签: php timestamp

我需要确定我们网站上发布的评论的“时间之前”时间戳。我的老板希望它只显示几个小时。所以它应该显示“48小时前”而不是“2天前”或480小时而不是“20天前”。

这是我找到的代码,但我不知道如何才能完成这些代码。

 date_default_timezone_set('Asia/Taipei');
 class Cokidoo_DateTime extends DateTime {

    protected $strings = array(
        'y' => array('1 year ago', '%d years ago'),
        'm' => array('1 month ago', '%d months ago'),
        'd' => array('1 day ago', '%d days ago'),
        'h' => array('1 hour ago', '%d hours ago'),
        'i' => array('1 minute ago', '%d minutes ago'),
        's' => array('now', '%d secons ago'),
    );

    /**
     * Returns the difference from the current time in the format X time ago
     * @return string
     */
    public function __toString() {
        $now = new DateTime('now');
        $diff = $this->diff($now);

        foreach($this->strings as $key => $value){
            if( ($text = $this->getDiffText($key, $diff)) ){
                return $text;
            }
        }
        return '';
     }

    /**
     * Try to construct the time diff text with the specified interval key
     * @param string $intervalKey A value of: [y,m,d,h,i,s]
     * @param DateInterval $diff
     * @return string|null
     */
     protected function getDiffText($intervalKey, $diff){
        $pluralKey = 1;
        $value = $diff->$intervalKey;
        if($value > 0){
        if($value < 2){
            $pluralKey = 0;
            }
            return sprintf($this->strings[$intervalKey][$pluralKey], $value);
        }
        return null;
    }
 }
echo $date = new Cokidoo_Datetime('2012-11-28 0:59:44');

4 个答案:

答案 0 :(得分:0)

如果您有发布日期的时间戳,则表示为(或可以)表示为int

$now = time();  //current Unix timestamp  in seconds
$hours = ceil(($now - $posted_time)/3600)

答案 1 :(得分:0)

在__toString()中调整上面代码的简单方法,将foreach块替换为:

$hours = $diff->format('h');
return $hours > 1 ? $hours . ' hour ago' : $hours . ' hours ago';

答案 2 :(得分:0)

工作示例:您的课程已修改为仅以小时为单位返回差异。

<?php
class Cokidoo_DateTime extends DateTime {
    public function __toString() {
        $now = new DateTime('now');
        $diff = $this->diff($now);        
        return $this->getHours($diff);
     }

     function getHours($diff) {
        $hours =  ($diff->d * 24) + $diff->h; 
        return (string)$hours;
     }
 }
echo $date = new Cokidoo_Datetime('2012-11-28 0:59:44');
?>

答案 3 :(得分:0)

'd' => array('24 hours ago', '%d hours ago'),

protected function getDiffText($intervalKey, $diff){
        $pluralKey = 1;
        $value = $diff->$intervalKey;
        if($value > 0){
        if($value < 2){
            $pluralKey = 0;
            }
            if($intervalKey == "d")
            {
            return sprintf($this->strings[$intervalKey][$pluralKey], $value*24);
            }
            return sprintf($this->strings[$intervalKey][$pluralKey], $value);
        }
    return null;
}

}