6

時間、分、秒で測定された時間の長さを表示したいと思いますが、時間の長さによっては 24 時間を超える場合があります。現在、私はこれを試しています:

$timeLength = new DateTime();
$timeLength->setTime(25, 30);
echo $timeLength->format('H:m:i'); // 01:30:00

表示させたい25:30:00です。

できればオブジェクト指向のソリューションを探しています。

ありがとう :)

4

2 に答える 2

8

あなたはすでに秒単位の長さを持っているので、あなたはそれを計算することができます:

function timeLength($sec)
{
    $s=$sec % 60;
    $m=(($sec-$s) / 60) % 60;
    $h=floor($sec / 3600);
    return $h.":".substr("0".$m,-2).":".substr("0".$s,-2);
}
echo timeLength(6534293); //outputs "1815:04:53"

本当にオブジェクトを使用したい場合は、次DateTimeの(一種の不正行為)ソリューションがあります。

function dtLength($sec)
{
    $t=new DateTime("@".$sec);
    $r=new DateTime("@0");
    $i=$t->diff($r);
    $h=intval($i->format("%a"))*24+intval($i->format("%H"));
    return $h.":".$i->format("%I:%S");
}
echo dtLength(6534293); //outputs "1815:04:53" too

OOが必要で、独自のクラスを作成してもかまわない場合は、試してみてください。

class DTInterval
{
    private $sec=0;
    function __construct($s){$this->sec=$sec;}
    function formet($format)
    {
        /*$h=...,$m=...,$s=...*/
        $rst=str_replace("H",$h,$format);/*etc.etc.*/
        return $rst;
    }
}
于 2012-11-26T08:37:49.720 に答える
2

DateTime時間間隔ではなく、時刻を処理します。そして25時がないから使い方がまずい。DateIntervalただし、日付間隔を処理するものがあります。それを使用するか、手動で計算してください。ただし、間隔を日と時間に分割するため、いくつかの計算を行う必要がDateIntervalあります。最も単純なことは、すでに持っている秒数に基づいて必要なものを計算することです。

于 2012-11-26T08:44:17.363 に答える