2

我查了一下,这不是重复的。我有这个功能

$since = date('Y-m-d H:i:s', strtotime($since));        
        $date = new DateTime($since);
        $interval = $date->diff(new DateTime('now'));
        return $interval->format('%y years, %m months, %d days, %h hours and %i minutos ago %s seconds ago');

但是,当然,我得到的日期是“5 年,2 个月,5 天......”

我想要得到的只是区间的一部分。意思是,我不想得到“0年,0个月,0天”,但可以说“3分钟”或“5天”等......

我是 DateTime 的新手,但在 php.net 站点中没有找到执行此操作的函数。是有一个还是我必须自己创建一个?谢谢!

4

2 回答 2

0

DateTime::diff返回一个DateInterval实例,其字段包括:

public integer $y ;
public integer $m ;
public integer $d ;
public integer $h ;
public integer $i ;
public integer $s ;

只需选择您需要的,例如$interval -> h几个小时。

在这里编辑你有一个包装:

function formatInterval(DateInterval $interval)
{

    static $values = array(
        'y' => 'years',
        'm' => 'months',
        'd' => 'days',
        'h' => 'hours',
        'i' => 'minutes',
        's' => 'seconds',                                   
    );

    $formatString = "";

    foreach($values as $key => $label)
    {

        if(($value = $interval -> {$key}) === 0)
            continue;

        $formatString .= sprintf('%s %s ', $value, $label);

    }

    return  $formatString;

}

$date = new DateTime;
$interval = $date -> diff( new DateTime('2012-09-7'));

echo formatInterval($interval);

打印出来:

20 hours 47 minutes 13 seconds
于 2012-09-07T20:37:23.573 回答
0

这就是我想出的:

<?php

/**
 * Return formatted interval where only the largest unit gets displayes.
 * @param DateInterval $interval
 *
 * @return string
 */
function format_properly(DateInterval $interval) {
    if ($interval->y !== 0) {
        return $interval->format("%y years");
    }
    if ($interval->m !== 0) {
        return $interval->format("%m months");
    }
    if ($interval->d !== 0) {
        return $interval->format("%d days");
    }
    if ($interval->h !== 0) {
        return $interval->format("%h hours");
    }
    if ($interval->i !== 0) {
        return $interval->format("%i minutes");
    }
    if ($interval->s !== 0) {
        return $interval->format("%s seconds");
    }
    return "0 seconds";
}

$date = new DateTime("now");
$date->sub(new DateInterval("PT2H5M")); //Now - 2 hours and 5 minutes

$now = new DateTime("now");

$interval = $date->diff($now);

echo format_properly($interval);
var_dump($interval);
于 2012-09-07T20:45:13.193 回答