将datetime转换为时间

时间:2013-09-17 18:43:03

标签: php

我需要将DateTime转换为年,月,日,小时,分钟,秒前像yahoo问题5周前,或1年前或1个月前,我的日期保存在数据库中,如下所示:{ {1}}。

现在我希望在PHP中显示年份,月份,日,小时,分钟和秒钟,例如:2011-11-30 05:25:50之前,但只需要一个时间单位显示,例如年份,日期或小时或分钟或秒。

我已经搜索了这个,但不明白我是怎么做到的,我知道Stack Overflow上有很多关于这个主题的问题,也许它是重复的但是我无法解决我的问题。

提前致谢。

4 个答案:

答案 0 :(得分:4)

假设你的意思相对于现在(如果你没有,请澄清你的问题),你可以使用这个:

$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

答案 1 :(得分:2)

我一直使用这个功能:

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"; }

}
回复时(你的日期)将返回相对时间的最佳格式,可能是几天,几小时,或者如果它不是很久以前,即使是在几秒钟内。

答案 2 :(得分:0)

试试这个: http://www.php.net/manual/en/function.strtotime.php

PHP有一个很好的功能strtotime,可以满足您的需求。

那将给你一个时间戳,然后你可以从你那里减去的任何日期做数学。

答案 3 :(得分:0)

您可以尝试使用preg_split来分割它。

尝试类似

的内容
$output = preg_split( "/ (-| |:) /", $input );

那应该给你一个数组,第一个元素是年份,第二个是月份,依此类推。