形式HH:MM:SS
の時間をフラットな秒数に変換する方法は?
P.S。時間の形式はMM:SS
のみである場合があります。
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;
最も簡単な方法は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;
関数 date_parse()
は、日付と時刻の解析にも使用できます。
$time = '21:30:10';
$parsed = date_parse($time);
$seconds = $parsed['hour'] * 3600 + $parsed['minute'] * 60 + $parsed['second'];
strtotime()
またはdate_parse()
でフォーマットMM:SS
を解析する場合、失敗します(date_parse()
およびDateTime
でstrtotime()
が使用されます) 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;
}
擬似コードで:
split it by colon
seconds = 3600 * HH + 60 * MM + SS
$time = 00:06:00;
$timeInSeconds = strtotime($time) - strtotime('TODAY');
これを試して:
$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;
strtotime
関数を使用して、today 00:00:00
から秒数を返すことができます。
$seconds= strtotime($time) - strtotime('00:00:00');
シンプル
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;
}
<?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];