web-dev-qa-db-ja.com

HH:MM:SS形式の時間を秒のみに変換しますか?

形式HH:MM:SSの時間をフラットな秒数に変換する方法は?

P.S。時間の形式はMM:SSのみである場合があります。

65
Ryan

explode何もする必要はありません:

$str_time = "23:12:95";

$str_time = preg_replace("/^([\d]{1,2})\:([\d]{2})$/", "00:$1:$2", $str_time);

sscanf($str_time, "%d:%d:%d", $hours, $minutes, $seconds);

$time_seconds = $hours * 3600 + $minutes * 60 + $seconds;

そして、正規表現を使用したくない場合:

$str_time = "2:50";

sscanf($str_time, "%d:%d:%d", $hours, $minutes, $seconds);

$time_seconds = isset($hours) ? $hours * 3600 + $minutes * 60 + $seconds : $minutes * 60 + $seconds;
118
Tim Cooper

最も簡単な方法strtotime()関数を使用することだと思います:

$time = '21:30:10';
$seconds = strtotime("1970-01-01 $time UTC");
echo $seconds;

// same with objects (for php5.3+)
$time = '21:30:10';
$dt = new DateTime("1970-01-01 $time", new DateTimeZone('UTC'));
$seconds = (int)$dt->getTimestamp();
echo $seconds;

demo


関数 date_parse() は、日付と時刻の解析にも使用できます。

$time = '21:30:10';
$parsed = date_parse($time);
$seconds = $parsed['hour'] * 3600 + $parsed['minute'] * 60 + $parsed['second'];

demo


strtotime()またはdate_parse()でフォーマットMM:SSを解析する場合、失敗します(date_parse()およびDateTimestrtotime()が使用されます) xx:yyのような形式を入力すると、パーサーはHH:MMではなくMM:SSであると想定するためです。形式を確認し、00:のみを持っている場合はMM:SSを追加することをお勧めします。

demostrtotime()demodate_parse()


24時間を超える場合は、次の関数を使用できます(MM:SSおよびHH:MM:SS形式で機能します)。

function TimeToSec($time) {
    $sec = 0;
    foreach (array_reverse(explode(':', $time)) as $k => $v) $sec += pow(60, $k) * $v;
    return $sec;
}

demo

89
Glavić

擬似コードで:

split it by colon
seconds = 3600 * HH + 60 * MM + SS
6
CanSpice
    $time = 00:06:00;
    $timeInSeconds = strtotime($time) - strtotime('TODAY');
5
sparsh turkane

これを試して:

$time = "21:30:10";
$timeArr = array_reverse(explode(":", $time));
$seconds = 0;
foreach ($timeArr as $key => $value)
{
    if ($key > 2) break;
    $seconds += pow(60, $key) * $value;
}
echo $seconds;
5
Chandu

strtotime関数を使用して、today 00:00:00から秒数を返すことができます。

$seconds= strtotime($time) - strtotime('00:00:00');
3
mehdi jalilvand

シンプル

function timeToSeconds($time)
{
     $timeExploded = explode(':', $time);
     if (isset($timeExploded[2])) {
         return $timeExploded[0] * 3600 + $timeExploded[1] * 60 + $timeExploded[2];
     }
     return $timeExploded[0] * 3600 + $timeExploded[1] * 60;
}
1
midan888
<?php
$time    = '21:32:32';
$seconds = 0;
$parts   = explode(':', $time);

if (count($parts) > 2) {
    $seconds += $parts[0] * 3600;
}
$seconds += $parts[1] * 60;
$seconds += $parts[2];
0
simme