web-dev-qa-db-ja.com

秒を時間形式に変換する方法は?

何らかの理由で、次のような時間形式に変換します:03:30 to seconds 3*3600 + 30*60, now。そこにある最初の(同じ)フォーマットに変換したい。どうでしたか?

私の試み:

3*3600 + 30*60 = 12600 

12600 / 60 = 210 / 60 = 3.5, floor(3.5) = 3 = hour

さて、議事録についてはどうですか?

値は19:00 or 02:51.私はあなたが写真を撮ったと思う。

ところで、2:0 for example to 02:00 using RegEx?

54
Dewan159
$hours = floor($seconds / 3600);
$mins = floor($seconds / 60 % 60);
$secs = floor($seconds % 60);

時間形式を取得する場合:

$timeFormat = sprintf('%02d:%02d:%02d', $hours, $mins, $secs);
118
ITroubs

これは簡単かもしれません

gmdate("H:i:s", $seconds)

PHP gmdate

162
CyberJunkie

時間が1時間未満になることがわかっている場合は、date()または$date->format()関数を使用できます。

$minsandsecs = date('i:s',$numberofsecs);

これは、システムのエポック時間が真夜中(1970年1月1日)から始まるためですが、これは重要ではありません。

1時間以上1日未満の場合は、 `を使用してhours:mins:secs形式で出力できます。

$hoursminsandsecs = date('H:i:s',$numberofsecs);

1日以上、モジュラスを使用して日数を計算する必要があります。これは、エポックの開始日が関連する場所になるためです。

お役に立てば幸いです。

15
Spudley

たぶん最も簡単な方法は:

gmdate('H:i:s', $your_time_in_seconds);
11
marco_manti

$timeは秒数としての時間です。

$seconds = $time % 60;
$time = ($time - $seconds) / 60;
$minutes = $time % 60;
$hours = ($time - $minutes) / 60;

現在、時間、分、秒は$hours$minutesおよび$secondsそれぞれ。

10
Hammerite

渡された秒の値に対して日、時間、分、秒を提供する別のソリューション:

function seconds_to_time($secs)
{
    $dt = new DateTime('@' . $secs, new DateTimeZone('UTC'));
    return array('days'    => $dt->format('z'),
                 'hours'   => $dt->format('G'),
                 'minutes' => $dt->format('i'),
                 'seconds' => $dt->format('s'));
}

print_r(seconds_to_time($seconds_value);

時間が1年を超えると予想される場合は、「日」に追加のロジックが必要になります。 str_pad() または ltrim() を使用して、先行ゼロを追加/削除します。

8
GZipp

ハードコーディングする場合は、モジュラスを使用して、他の人が示唆したように時間を抽出します。

MySQLデータベースから秒を返す場合、アプリで秒形式のデータが必要ないと仮定すると、はるかにクリーンな方法があり、MySQLの SEC_TO_TIME を使用できます。時間をhh:mm:ss形式で返します。

例えば。

SELECT SEC_TO_TIME(my_seconds_field) AS my_timestring;
7

このコードを使用して秒数をhours:minutes:secondsのような時間形式に変換する場合、ITroubsの答えは残りの秒を処理しません

これに対処するために私がしたことは次のとおりです(これにより、1桁の分と秒に先行ゼロも追加されます)。

$seconds = 3921; //example

$hours = floor($seconds / 3600);
$mins = floor(($seconds - $hours*3600) / 60);
$s = $seconds - ($hours*3600 + $mins*60);

$mins = ($mins<10?"0".$mins:"".$mins);
$s = ($s<10?"0".$s:"".$s); 

$time = ($hours>0?$hours.":":"").$mins.":".$s;

この例では、$ timeに「1:05:21」が含まれます。

7
Flaxious

申し訳ありませんが、これは遅すぎますが、おそらく便利です

function mediaTimeDeFormater($seconds)
{
    if (!is_numeric($seconds))
        throw new Exception("Invalid Parameter Type!");


    $ret = "";

    $hours = (string )floor($seconds / 3600);
    $secs = (string )$seconds % 60;
    $mins = (string )floor(($seconds - ($hours * 3600)) / 60);

    if (strlen($hours) == 1)
        $hours = "0" . $hours;
    if (strlen($secs) == 1)
        $secs = "0" . $secs;
    if (strlen($mins) == 1)
        $mins = "0" . $mins;

    if ($hours == 0)
        $ret = "$mins:$secs";
    else
        $ret = "$hours:$mins:$secs";

    return $ret;
}

echo mediaTimeDeFormater(216.064000);//3:36
3

このようなもの?

 if(is_numeric($time)){
$value = array(
  "years" => 0, "days" => 0, "hours" => 0,
  "minutes" => 0, "seconds" => 0,
);
if($time >= 31556926){
  $value["years"] = floor($time/31556926);
  $time = ($time%31556926);
}
if($time >= 86400){
  $value["days"] = floor($time/86400);
  $time = ($time%86400);
}
if($time >= 3600){
  $value["hours"] = floor($time/3600);
  $time = ($time%3600);
}
if($time >= 60){
  $value["minutes"] = floor($time/60);
  $time = ($time%60);
}
$value["seconds"] = floor($time);
return (array) $value;

} else {return(bool)FALSE; }

から取得: http://www.ckorp.net/sec2time.php

3
FatherStorm

モジュロを使用:

$hours = $time_in_seconds / 3600;
$minutes = ($time_in_seconds / 60) % 60;
2
bitmask

ほんの1つの小さな追加例

要求された時間(ミリ秒)

    // ms2time( (microtime(true) - ( time() - Rand(0,1000000) ) ) );
    // return array
    function ms2time($ms){
        $return = array();
        // ms
        $return['ms'] = (int) number_format( ($ms - (int) $ms), 2, '', '');
        $seconds = (int) $ms;
        unset($ms);

        if ($seconds%60 > 0){
            $return['s'] = $seconds%60;
        } else {
            $return['s'] = 0;
        }

        if ( ($minutes = intval($seconds/60))){
            $return['m'] = $minutes;
        }

        if (isset($return['m'])){
            $return['h'] = intval($return['m'] / 60);
            $return['m']  = $return['m'] % 60; 
        }


        if (isset($return['h'])){
            $return['d'] = intval($return['h'] / 24);
            $return['h']  = $return['h'] % 24; 
        }

        if (isset($return['d']))
            $return['mo'] = intval($return['d'] / 30);

        foreach($return as $k=>$v){
            if ($v == 0)
                unset($return[$k]);
        }

        return $return;
    }

    // ms2time2string( (microtime(true) - ( time() - Rand(0,1000000) ) ) );
    // return array     
    function ms2time2string($ms){
        $array = array(
            'ms' => 'ms',
            's'  => 'seconds',
            'm'  => 'minutes',
            'h'  => 'hours',
            'd'  => 'days',
            'mo' => 'month',
        );


        if ( ( $return = ms2time($ms) )  && count($ms) > 0){

            foreach($return as $key=>$data){
                $return[$key] = $data .' '.$array[$key];
            }

        }
        return implode(" ", array_reverse($return));
    }
2
Butuzov

すべての先頭に「0」を付ける別の方法を次に示します。

$secCount = 10000;
$hours = str_pad(floor($secCount / (60*60)), 2, '0', STR_PAD_LEFT);
$minutes = str_pad(floor(($secCount - $hours*60*60)/60), 2, '0', STR_PAD_LEFT);
$seconds = str_pad(floor($secCount - ($hours*60*60 + $minutes*60)), 2, '0', STR_PAD_LEFT);

Flaxiousの答えからの改作です。

2
Gardner