6

重複の可能性:
秒を時:分:秒に変換する

私は、先頭にゼロを付けずに秒を分:秒に変換する良い方法を見つけるために、インターネット全体を検索してきました。私はすでにこの質問をチェックアウトしました.これは私が見つけることができた唯一のものですが、それらの答えはどれもあまり良く見えません. おそらく、それらがこれを達成するための唯一かつ最良の方法ですが、そうでないことを願っています。

これを行ったところ、先行ゼロなしで分数が得られましたが、秒を取得できませんでした。このように考えることができる唯一の方法は、数行の数学などを行うことですが、これほど単純なものでは非常に多くの作業のように思えます...なぜPHPがそうしないのかわかりませんとにかく、何分も何秒も組み込みません....

intval(gmdate("i:s", $duration));

編集 私がやろうとしているのは、ビデオの秒数を H:M:S 形式に変換することだけです。

4

3 に答える 3

2
implode(
    ':',
    array_map(
        function($i) { return intval($i, 10); },
        explode(':', gmdate('H:i:s', $duration))
    )
)

ただし、hour==0 の場合は 0: を出力せず、m:s のみを使用します。

preg_replace(
    '~^0:~',
    '', 
    implode(
        ':',
        array_map(
            function($i) { return intval($i, 10); },
            explode(':', gmdate('H:i:s', $duration))
        )
    )
)
于 2012-12-27T03:12:38.073 に答える
2

私はそれを繰り返し書くだけです:

function duration_to_timestring($duration)
{
        $s = [];
        if ($duration > 3600) {
                $s[] = floor($duration / 3600);
                $duration %= 3600;
        }
        $s[] = floor($duration / 60);
        $s[] = floor($duration % 60);

        return join(':', $s);
}
于 2012-12-27T03:32:13.967 に答える
1

gmdate は、2 番目のパラメーターとしてタイムスタンプを受け取ります。次のようにする必要があります。

echo gmdate("H:i:s", mktime(0, 0, 0, 1, 1, 1998) + $duration);

文字列を取得し、それを再びintに変換しているため、intvalはそこにあるべきではありません。H:i:s では 10:40:05 になります。
ただし、期間が 24 時間を超える場合、これは機能しません。

于 2012-12-27T03:09:01.127 に答える