Операторы с форматом времени

У меня например 00:09:33.485 на этот раз для фильма или эпизода, и я хочу добавить 30 секунд или 5 минут, так как это сделать так 00:09:33.485 + 00:05:30.124 = 00:15:03.609 или как это 00:09:33.485 - 00:05:30.124 = 00:04:03.361

1

Решение

Хорошо, я отредактировал ответ sjagr, и это для минуса:

$time = '00:09:33.485';
$add = '00:05:30.124';

$timeMs = explode('.', $time);
$addMs = explode('.', $add);

$sumMs = $timeMs[1] - $addMs[1];
$timeSplit = explode(':', $timeMs[0]);
$addSplit = explode(':', $addMs[0]);

if ($sumMs < 0) {
$timeSplit[2] -= 1;
$sumMs = $sumMs + 1000;
}
$sumMs = str_pad($sumMs, 3, '0', STR_PAD_LEFT);

$i = 2;
while ($i >= 0) {
$timeSplit[$i] -= $addSplit[$i];
if ($i > 0 && $timeSplit[$i] < 0) {
$timeSplit[$i - 1] -= 1;
$timeSplit[$i] = $timeSplit[$i] + 60;
}
$timeSplit[$i] = str_pad($timeSplit[$i], 2, '0', STR_PAD_LEFT);
$i--;
}

$time = implode(':', $timeSplit);
$time = $time . '.' . $sumMs;

echo $time;
2

Другие решения

Вы можете использовать стандартный формат времени в сочетании с DateTime класс для достижения надлежащего формата времени и математики, но если вы настаиваете на использовании этого формата …

$time = '00:09:33.485';
$add = '00:05:30.124';

$timeMs = explode('.', $time);
$addMs = explode('.', $add);

$sumMs = $timeMs[1] + $addMs[1];
$timeSplit = explode(':', $timeMs[0]);
$addSplit = explode(':', $addMs[0]);

if ($sumMs > 1000) {
$timeSplit[2] += 1;
$sumMs = $sumMs - 1000;
}
$sumMs = str_pad($sumMs, 3, '0', STR_PAD_LEFT);

$i = 2;
while ($i >= 0) {
$timeSplit[$i] += $addSplit[$i];
if ($i > 0 && $timeSplit[$i] > 59) {
$timeSplit[$i - 1] += 1;
$timeSplit[$i] = $timeSplit[$i] - 60;
}
$timeSplit[$i] = str_pad($timeSplit[$i], 2, '0', STR_PAD_LEFT);
$i--;
}

$time = implode(':', $timeSplit);
$time = $time . '.' . $sumMs;

echo $time; // Returns 00:15:03.609 - note that there's no handling for 24+ hours

Это много работы, так что опять же вы действительно должны проверить документы на DateTime учебный класс, конкретно add() функция

1

Существует решение, которое, к сожалению, работает только с полными секундами, но без миллисекунд:

<?php
function addtime($t1, $t2)
{
$d = date_create("1970-01-01 $t1");
list($h, $m, $s) = explode(':', $t2);
date_add($d, new DateInterval("PT{$h}H{$m}M{$s}S"));
return date('H:i:s', $d->getTimestamp());
}

print addtime('00:09:33', '00:05:30');
?>

Для вычитания времени используйте date_sub () вместо date_add ().

РЕДАКТИРОВАТЬ: Здесь та же функция, включая миллисекунды:

function addtime($t1, $t2)
{
list($t1, $ms1) = explode('.', $t1);
$d = date_create("1970-01-01 $t1");
list($h, $m, $s) = explode(':', $t2);
list($s, $ms2) = explode('.', $s);

date_add($d, new DateInterval("PT{$h}H{$m}M{$s}S"));
$ts = $d->getTimestamp();

$ms = $ms1 + $ms2;
if($ms >= 1000) { $ms -= 1000; $ts++; }

return date('H:i:s', $ts) . ".$ms";
}

print addtime('00:09:33.485', '00:05:30.124');
0
По вопросам рекламы [email protected]