Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 具有时间格式的运算符_Php_Operators_Subtitle_Time Format - Fatal编程技术网

Php 具有时间格式的运算符

Php 具有时间格式的运算符,php,operators,subtitle,time-format,Php,Operators,Subtitle,Time Format,例如,这次我有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您可以使用标准时间格式与DateTime类相结合来实现适当的时间格式和数学,但是如果您坚持使用这种格式 $time = '00:09:33.485'; $add = '00:05:30.124'; $timeMs = explode('.

例如,这次我有
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
您可以使用标准时间格式与
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

这是一项艰巨的工作,因此您确实应该再次强调,特别是有一种解决方案,不幸的是,它只能在整秒内工作,而不能在毫秒内工作:

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

好的,我编辑了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;
$time='00:09:33.485';
$add='00:05:30.124';
$timeMs=爆炸('.',$time);
$addMs=分解('.',$add);
$sumMs=$timeMs[1]-$addMs[1];
$timeSplit=explode(“:”,$timeMs[0]);
$addSplit=explode(“:”,$addMs[0]);
如果($sums<0){
$timeSplit[2]=1;
$sumMs=$sumMs+1000;
}
$sumMs=str_pad($sumMs,3,'0',str_pad_左);
$i=2;
而($i>=0){
$timeSplit[$i]=$addSplit[$i];
如果($i>0&&$timeSplit[$i]<0){
$timeSplit[$i-1]=1;
$timeSplit[$i]=$timeSplit[$i]+60;
}
$timeSplit[$i]=str_pad($timeSplit[$i],2,'0',str_pad_左);
$i--;
}
$time=内爆(“:”,$timeSplit);
$time=$time'.'$总和;
回声时间;

我需要它在
+
-
上工作,这段代码在
-
上工作?@AdamMo。只做加法,因为这是你在问题范围内要求的。@AdamMo。查看我的编辑,特别是
while($i>=0){
而不是
while($i>0){
@AdamMo.
if($i>0&&$timeSplit[$i]>59){
是最新的解决方案。您再次意识到,所有这些都是使用
DateTime
构建的。如果您刚刚决定接受标准的DateTime格式?我想要这种格式的字幕,请您为
-
编写另一个代码。谢谢