如果在提供的功能中为零,则隐藏小时和分钟

The function below outputs hours:0 whether the time is <1 hour or mins:0 when mins<1.

How can I show only the variables that are not zero?

Thank you.

function time_difference($endtime){

    $hours =date("G",$endtime);
    $mins =date("i",$endtime);
    $secs =date("s",$endtime);
    $diff="'hours': ".$hours.",'mins': ".$mins.",'sec': ".$secs;
    return $diff;
}   

$end_time =strtotime("+7 hours") - strtotime($entry->pubDate);
$difference = time_difference($end_time);
echo $difference;

Another possible approach:

function time_difference($endtime){
    $times=array(
        'hours' => date("G",$endtime),
        'mins' => date("i",$endtime),
        'secs' => date("s",$endtime),
    );

    //added a "just a moment ago" feature for you
    if (intval($times['hours'], 10) == 0 
           && intval($times['mins'], 10) == 0) {
        return "just a moment ago";
    } 

    $diff='';
    foreach ($times as $k=>$v) {
        $diff.=empty($diff) ? '' : ',';
        $diff.=intval($v, 10) == 0 ? '' : "'$k':$v";
    }

    return $diff;
}   

Use the ? operator.

$diff=($hours > 0) ? "'hours': ".$hours : "";
$diff=$diff.($minutes > 0) ? etc...

For larger time ranges, you'd better use maths instead of using date():

function time_difference($endtime){
    // hours can get over 23 now, $endtime is in seconds
    $hours = floor($endtime / 3600);
    // modulo (%) already rounds down, not need to use floor()
    $mins = $endtime / 60 % 60;
    // the remainder of $endtime / 60 are seconds in a minute
    $secs = $endtime % 60;
    // this array holds the hour, minute and seconds if greater than 0
    $diff = array();
    if ($hours) $diff[] = "'hours': $hours";
    if ($mins) $diff[] = "'mins': $mins";
    if ($secs) $diff[] = "'sec': $secs";
    // join the values with a comma
    $diff = implode(',', $diff);
    if (!$diff) { // hours, mins and secs are zero
        $diff = "just a moment ago";
    }
    return $diff;
}

The below function would only return hours in the range 0 - 23. If the time exceeds a day, hours become zero:

function time_difference($endtime){

    $hours = (int)date("G",$endtime);
    $mins = (int)date("i",$endtime);
    $secs = (int)date("s",$endtime);
    // this array holds the hour, minute and seconds if greater than 0
    $diff = array();
    if ($hours) $diff[] = "'hours': $hours";
    if ($mins) $diff[] = "'mins': $mins";
    if ($secs) $diff[] = "'sec': $secs";
    // join the values with a comma
    $diff = implode(',', $diff);
    if (!$diff) { // hours, mins and secs are zero
        $diff = "just a moment ago";
    }
    return $diff;
}

(int) is needed to turn the string returned by date() into a string. "01" becomes 1 and "00" becomes "0" using this.