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

时间:2011-06-10 17:45:58

标签: php date string if-statement

以下功能输出小时数:0是时间是<1小时还是分钟:0分钟时<1。

如何只显示不为零的变量?

谢谢。

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;

3 个答案:

答案 0 :(得分:3)

另一种可能的方法:

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

答案 1 :(得分:2)

使用?操作

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

答案 2 :(得分:1)

对于较大的时间范围,您最好使用数学而不是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;
}

以下功能只返回0-23范围内的小时数。如果时间超过一天,则小时变为零:

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)返回的字符串转换为字符串需要

date()。使用此"01"变为1,"00"变为“0”。