Подтвердить что ты не робот

Преобразование времени в формате HH: MM: SS только на секунды?

Как повернуть время в формате HH:MM:SS в число "плоских секунд"?

P.S. Время может быть иногда только в формате MM:SS.

4b9b3361

Ответ 1

Не нужно ничего 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;

Ответ 2

Я думаю, что самый простой метод будет использовать функцию 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'];

демонстрация


Если вы проанализируете формат MM:SS с помощью strtotime() или date_parse(), он будет терпеть неудачу (date_parse() используется в strtotime() и DateTime), потому что когда вы вводите формат, подобный xx:yy, парсер предполагает HH:MM, а не MM:SS. Я бы предложил проверить формат и добавить 00:, если у вас есть только MM:SS.

демонстрация strtotime() demo date_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;
}

демонстрация

Ответ 3

В псевдокоде:

split it by colon
seconds = 3600 * HH + 60 * MM + SS

Ответ 4

Попробуйте следующее:

$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

    $time = 00:06:00;
    $timeInSeconds = strtotime($time) - strtotime('TODAY');

Ответ 6

Вы можете использовать функцию strtotime чтобы вернуть количество секунд с today 00:00:00.

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

Ответ 7

Простой

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;
}

Ответ 8

<?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];

Ответ 9

$time = '01:21:34'; //time in h:s:m
$timeToSeconds = (new DateTime('1970/01/01 ' . $time))->getTimestamp();

Ответ 10

$time="12:10:05"; //your time
echo strtotime("0000-00-00 $time")-strtotime("0000-00-00 00:00:00");

Ответ 11

// HH:MM:SS or MM:SS
echo substr($time , "-2"); // returns last 2 chars : SS