我需要确定我们网站上发布的评论的“时间之前”时间戳。我的老板希望它只显示几个小时。所以它应该显示“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');
答案 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;
}
}