如果它的0如何正确删除天? (约会时间)

时间:2018-02-09 16:48:26

标签: php

function secondsToTime( $seconds )
{
    $dtF = new DateTime( "@0" );
    $dtT = new DateTime( "@$seconds" );
    $r = $dtF->diff( $dtT )->format( "%ad, %hh, %im and %ss" );
    print( $r );
    if( strpos( $r, "0h, ", 0 ) !== false )
        $r = str_replace( "0h, ", "", $r );
    if( strpos( $r, "0d, ", 0 ) !== false )
        $r = str_replace( "0d, ", "", $r );

    return $r;
}

我尝试了这段代码,但事后我意识到这会让50d 5h说55h。我怎样才能最好地删除0天,几小时?

1 个答案:

答案 0 :(得分:0)

拥有统一结构的字符串更容易使用,这就是我将“和”替换为“,”的原因。 如果这很重要,可以修复。

我爆炸并查看数组每个部分的第一个字符,如果它是零,则删除它。
一旦我发现无零停止循环 然后内爆回字符串格式。

function secondsToTime( $seconds )
{
    $dtF = new DateTime( "@0" );
    $dtT = new DateTime( "@$seconds" );
    $r = $dtF->diff( $dtT )->format( "%ad, %hh, %im, %ss" );
    //print( $r );
    $arr = explode(", ", $r);
    Foreach($arr as $key => $val){
        If(substr($val, 0,1) == "0"){
            unset($arr[$key]);
        }Else{
            Break;
        }
    }
    return implode(", ",$arr);
}

Echo secondsToTime( 50+3600*5 );

https://3v4l.org/PIrpS

您可以使用此返回来获取“和”。

return implode(", ",array_slice($arr,0,count($arr)-1)) . ($seconds > 59 ? " and " : "") . End($arr);

如果超过59秒,则会添加“和”,否则只输入秒数。