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格式?我想要这种格式的字幕,请您为-
编写另一个代码。谢谢