2014-10-01 4 views
1

У меня есть, например, 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Операторы с форматом времени

ответ

2

Хорошо, я отредактирован 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; 
1

Вы могли бы использовать стандартный формат времени в сочетании с 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 

Это много работы, так что опять вы действительно должны check out the docs on the DateTime class, в частности, the add() function

+0

мне нужно, чтобы работать на '+' и '-' тоже этот код работает на' -'? –

+0

также часы не работают –

+0

@AdamMo. Дополнение только, потому что это то, о чем вы просили в рамках вашего вопроса. – sjagr

0

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

<?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().

EDIT: Здесь же функции, включая миллисекунды:

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');