2

如何以 yyyy-mm-dd hh:mm:ss 格式减去和/或添加经过的时间?
即如何将 16:49:13 添加到 2012-06-18 22:03:18 ?

另外,如何从 2012-06-19 14:52:31 中减去 16:49:13?
我需要结果的格式为 hh:mm:ss

4

4 回答 4

1

我的快速想法:

<?php

$a="16:49:13"; 
$e=explode(':', $a);

$y="2012-06-18 22:03:18";

echo  date('d-m-Y h:i:s',strtotime("+ $e[0] hours $e[1] minutes $e[2] seconds ",strtotime($y)));

输出:19-06-2012 02:52:31

于 2012-07-29T20:32:56.793 回答
0

给定两次,例如:23:54:2316:49:13,您希望输出仍为 HH:MM:SS 格式,表示由两个日期之和产生的小时、分钟和秒的总数(应该输出40:43:36):

您可以使用此功能:

function addTime($t1, $t2)
{
    $t1a = explode(':', $t1);
    $t2a = explode(':', $t2);

    $h = $t1a[0] + $t2a[0] + ((($t1a[1] + $t2a[1]) / 60) >= 1 ? 1 : 0);
    $m = (($t1a[1] + $t2a[1]) % 60) + ((($t1a[2] + $t2a[2]) / 60) >= 1 ? 1 : 0);
    $s = ($t1a[2] + $t2a[2]) % 60;

    if($m == 60)
    {
        $h++;
        $m = 0;
    }

    $h = strlen($h) < 2 ? '0'.$h : $h;
    $m = strlen($m) < 2 ? '0'.$m : $m;
    $s = strlen($s) < 2 ? '0'.$s : $s;

    return "$h:$m:$s";
}

$t1 = '23:54:23'; 
$t2 = '16:49:13';

echo addTime($t1, $t2); // 40:43:36
于 2012-07-29T20:28:31.550 回答
0

您可以为此使用 PHP 的DateTime 对象。类似于以下内容:-

加上:-

$dateTime = new DateTime("2012-06-18 22:03:18");
list($hours, $minutes, $seconds) = explode(":", "16:49:13");
$seconds += $minutes * 60;
$seconds += $hours * 3600;
$interval = new DateInterval("PT{$seconds}S");
$dateTime->add($interval);

减去:-

$dateTime = new DateTime("2012-06-18 22:03:18");
list($hours, $minutes, $seconds) = explode(":", "16:49:13");
$seconds += $minutes * 60;
$seconds += $hours * 3600;
$interval = new DateInterval("PT{$seconds}S");
$dateTime->sub($interval);

然后使用该DateTime::format()函数以您希望的任何方式输出结果。

datetime 对象将为您处理诸如闰年、时区等内容。这些都是很容易让时间计算成为痛苦的事情。

于 2012-07-29T20:35:22.577 回答
0

这是使用 strtotime 函数的另一种方法:

$myTime      = strtotime('2012-06-18 22:03:18');
$delta       = (16 * 60 * 60) + (49 * 60) + 13;
$myTimeMinus = $myTime - $delta;
$myTimePlus  = $myTime + $delta;
echo date('Y-m-d H:i:s', $myTimeMinus);

//2012-06-18 05:14:05

echo date('Y-m-d H:i:s', $myTimePlus);
// 2012-06-19 14:52:31
于 2012-07-29T21:32:16.383 回答