将datetime转换为更早的时间
我需要将DateTime转换为年,月,日,小时,分钟,秒前像yahoo问题5周前,或1年前或1个月前,我的日期是像这样保存在数据库中: 2011-11-30 05:25:50
。
现在我想在PHP中显示像年,月,日,小时,分钟和秒这样的数据: how much year, how many months , days, hours, minutes, seconds
前,但只需要一个时间单位显示就像是年或几天或几小时或几分钟或几秒钟。
我已经搜索了这个,但不明白我怎么能做到这一点,我知道有关Stack Overflow这个主题有很多问题,也许它是重复的,但我无法解决我的问题。
提前致谢。
假设你的意思是相对于现在(如果你不这样做,请澄清你的问题),你可以使用这个:
$then = new DateTime('2011-11-30 05:25:50');
$now = new DateTime();
$delta = $now->diff($then);
$quantities = array(
'year' => $delta->y,
'month' => $delta->m,
'day' => $delta->d,
'hour' => $delta->h,
'minute' => $delta->i,
'second' => $delta->s);
$str = '';
foreach($quantities as $unit => $value) {
if($value == 0) continue;
$str .= $value . ' ' . $unit;
if($value != 1) {
$str .= 's';
}
$str .= ', ';
}
$str = $str == '' ? 'a moment ' : substr($str, 0, -2);
echo $str;
输出:
1 year, 9 months, 17 days, 14 hours, 31 minutes, 31 seconds
我一直使用这个功能:
function when($datetime) {
define("SECOND", 1);
define("MINUTE", 60 * SECOND);
define("HOUR", 60 * MINUTE); define("DAY", 24 * HOUR);
define("MONTH", 30 * DAY); $delta = time() - strtotime($datetime);
// convert
if($delta < 1 * MINUTE) { return $delta == 1 ? "one second ago" : $delta." seconds ago"; }
if($delta < 2 * MINUTE) { return "a minute ago"; } if($delta < 45 * MINUTE) { return floor($delta / MINUTE)." minutes ago"; }
if($delta < 90 * MINUTE) { return "an hour ago"; } if($delta < 24 * HOUR) { return floor($delta / HOUR)." hours ago"; }
if($delta < 48 * HOUR) { return "yesterday"; } if($delta < 30 * DAY) { return floor($delta / DAY)." days ago"; }
if($delta < 12 * MONTH) { $months = floor($delta / DAY / 30); return $months <= 1 ? "one month ago" : $months." months ago"; }
else { $years = floor($delta / DAY / 365); return $years <= 1 ? "one year ago" : $years." years ago"; }
}
当(你的日期在这里)会回复相对时间的最佳格式,这可能是几天,几小时,或者如果它不是很久以前,甚至在几秒钟内。
试试这个:http://www.php.net/manual/en/function.strtotime.php
PHP有一个很好的函数strtotime
可以满足你的需求。
这会给你一个时间戳,然后你可以从那里进行数学运算,无论你从哪个日期减去。
链接地址: http://www.djcxy.com/p/10113.html