1

したがって、ポッドキャストの長さの配列が 30:13 (分:秒) 形式であり、最初に有効な UNIX タイムスタンプに変換し、2 番目にこのタイムスタンプを「30 分 13 秒」のような読み取り可能な形式にフォーマットします。

タイムスタンプ関数への変換は次のようになります。

public function duration($str) {
    $a = explode(':', $str);
    $v = (($a[0]*60)+$a[1]);
    return $v;
}

これをフォーマットしようとすると問題がdate('H:i:s', $v)発生し、ポッドキャストの長さが 17 時間になると、「17:35:50」のような数字が生成されます。私は何を間違っていますか?

4

7 に答える 7

3

UNIX タイムスタンプは期間を計算するためのものではなく、エポック (1970 年初頭) からの特定の時間を秒単位で表します。タイムスタンプを期待する関数などに非常に低い値を渡すと、date()1970 年代初頭の日付が返されます。時間のフォーマットを手動で行う必要があります。

編集: GMTタイムゾーンに住んでいた場合、期待した結果が得られることに注意してください。これはdate()、タイムスタンプから生成された日付を計算するときに、現在のタイムゾーンが考慮されるためです。

于 2012-05-30T06:34:15.423 に答える
1

DateIntervalオブジェクトを使用できます。

function getInterval($durationString) {
    $parts = explode(':', $durationString);
    $min = $parts[0];
    $sec = $parts[1];

    $interval = new DateInterval("PT{$min}M{$sec}S");
    return $interval;
}

$interval = getInterval('30:12');
echo $interval->format('%imins %ss');

分と秒のみの継続時間形式を使用していると想定しています。もちろん、時間も必要な場合はコードを変更できます。

于 2012-05-30T06:50:03.600 に答える
1

hh:mm:ss を試すことができます

list($hours,$mins,$secs) = explode(':', $yourtime);
echo $hours.' hours '.$mins .'minuts'. $secs .'seconds';

これでうまくいくかな

于 2012-05-30T06:41:00.090 に答える
1

Unix タイムスタンプは、1970 年 1 月 1 日 00:00:00 から経過した秒数を示しますが、期間は示しません。

あなたの仕事を達成するために、私は次のことを行います:

$str = '30:13';

function duration($str) {

    $a = explode(':', $str);

    $hours = floor($a[0] / 60);

    $minutes = $a[0] - $hours * 60;

    $seconds = $a[1];

    $result = '';

    if($hours) {

        $result .= "$hours hours ";

    }

    if($minutes) {

        $result .= "$minutes minutes ";

    }

    return "$result$seconds seconds";

}

var_dump(duration($str));
于 2012-05-30T06:42:39.680 に答える
1

シンプルな正規表現を使用

function duration($str)
{
    return preg_replace('/^([0-9]{2})\:([0-9]{2}$)/', '$1 mins $2s', $str); 
}
echo duration("30:33");

出力

30 mins 33s

これがお役に立てば幸いです。ありがとう!!

于 2012-05-30T06:39:18.830 に答える
1

読み取り可能な文字列にフォーマットするだけです。

$duration = '30:13';
list($min, $sec) = explode(':', $duration);
echo "{$min}mins {$sec}s"; // 30mins 13s
于 2012-05-30T06:34:15.553 に答える
1

これはあなたが望む仕事をするはずです。タイムスタンプは別のものです。http://en.wikipedia.org/wiki/Timestampを参照してください。

// $str has the format 'mm:ss'
public function duration($str) {
    list($min, $sec) = explode(':', $str);
    return $min . ' mins ' . $sec . ' sec';
}
于 2012-05-30T06:37:42.863 に答える