1

サイトに投稿されたコメントの「時間前」のタイムスタンプを特定する必要があります。私の上司は、それを数時間だけ表示することを望んでいます。そのため、「2 日前」ではなく「48 時間前」、または「20 日前」ではなく 480 時間と表示する必要があります。

ここに私が見つけたコードがありますが、数時間しか方法がわかりません。

 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

4 に答える 4

0

投稿日のタイムスタンプがある場合、それは int として表されます (または表される可能性があります)。

$now = time();  //current Unix timestamp  in seconds
$hours = ceil(($now - $posted_time)/3600)
于 2012-12-02T10:23:22.133 に答える
0

上記のコードを適応させる __toString() の簡単な方法では、 foreach ブロックを次のように置き換えます。

$hours = $diff->format('h');
return $hours > 1 ? $hours . ' hour ago' : $hours . ' hours ago';
于 2012-12-02T10:23:28.473 に答える
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');
?>
于 2012-12-02T10:24:54.057 に答える
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;
}

}

于 2012-12-02T10:25:13.893 に答える