我的this PHP函数将日期时间字符串转换为更具可读性的方式来表示经过的日期和时间。这在PHP版本5.3.0中工作得很好,但在服务器端,PHP版本5.2.17缺少此功能。有没有办法可以有效地解决这个问题?这不仅是一个需要这个"diff“函数的函数,而且还有更多。
public function ago($dt1)
{
$interval = date_create('now')->diff(date_create($dt1));
$suffix = ($interval->invert ? ' ago' : '-');
if ($v = $interval->y >= 1) return $this->pluralize($interval->y, 'year') . $suffix;
if ($v = $interval->m >= 1) return $this->pluralize($interval->m, 'month') . $suffix;
if ($v = $interval->d >= 1) return $this->pluralize($interval->d, 'day') . $suffix;
if ($v = $interval->h >= 1) return $this->pluralize($interval->h, 'hour') . $suffix;
if ($v = $interval->i >= 1) return $this->pluralize($interval->i, 'minute') . $suffix;
return $this->pluralize($interval->s, 'second') . $suffix;
} 发布于 2010-11-22 15:38:10
我来到了这个重写的函数,它工作得很好。
class DateTimeFormatter
{
private $now;
public $invert;
public $y, $m, $d, $h, $i, $s;
function DateTimeFormatter()
{
$this->now = date_parse(date("Y-m-d H:i:s"));
}
function now()
{
$this->now = date_parse(date("Y-m-d H:i:s"));
return $this->now;
}
function diff($dt)
{
if (!is_array($dt))
$dt = date_parse($dt);
if ($this->now() > $dt)
{
$this->invert = 1;
$this->y = $this->now['year'] - $dt['year'];
$this->m = $this->now['month'] - $dt['month'];
$this->d = $this->now['day'] - $dt['day'];
$this->h = $this->now['hour'] - $dt['hour'];
$this->i = $this->now['minute'] - $dt['minute'];
$this->s = $this->now['second'] - $dt['second'];
}
else
{
$this->invert = 0;
$this->y = $dt['year'] - $this->now['year'];
$this->m = $dt['month'] - $this->now['month'];
$this->d = $dt['day'] - $this->now['day'];
$this->h = $dt['hour'] - $this->now['hour'];
$this->i = $dt['minute'] - $this->now['minute'];
$this->s = $dt['second'] - $this->now['second'];
}
return $this;
}
function ago($datetime)
{
$interval = $this->diff($datetime);
$suffix = ($interval->invert ? ' ago' : '');
if ($v = $interval->y >= 1) return $this->pluralize($interval->y, 'year') . $suffix;
if ($v = $interval->m >= 1) return $this->pluralize($interval->m, 'month') . $suffix;
if ($v = $interval->d >= 1) return $this->pluralize($interval->d, 'day') . $suffix;
if ($v = $interval->h >= 1) return $this->pluralize($interval->h, 'hour') . $suffix;
if ($v = $interval->i >= 1) return $this->pluralize($interval->i, 'minute') . $suffix;
return $this->pluralize($interval->s, 'second') . $suffix;
}
function pluralize( $count, $text )
{
return $count . (($count == 1) ? (" $text") : (" ${text}s"));
}
}发布于 2010-11-21 00:07:45
答案可以在你在php.net上找到代码的注释下面找到:http://php.net/manual/en/datetime.diff.php
<?php
function date_diff($date1, $date2) {
$current = $date1;
$datetime2 = date_create($date2);
$count = 0;
while(date_create($current) < $datetime2){
$current = gmdate("Y-m-d", strtotime("+1 day", strtotime($current)));
$count++;
}
return $count;
}
echo (date_diff('2010-3-9', '2011-4-10')." days <br \>");
?>https://stackoverflow.com/questions/4233553
复制相似问题