在PHP中向datetime添加小时数

在PHP中向datetime添加小时数,php,Php,我得到了一个名为$transactiontime的变量。我想给这个变量加上6个小时。但是我需要排除12点到6点之间的时间 比如说,, 我在2016年1月1日下午11:00进行了交易。添加6小时后,输出应为2016年1月2日上午11点 我该怎么做?谢谢你DateTime是PHP中一个非常棒的特性 $string = '1/1/2016 11.00PM'; $date = new DateTime($string); $interval = new DateInterval('PT6H'); $d

我得到了一个名为
$transactiontime
的变量。我想给这个变量加上6个小时。但是我需要排除12点到6点之间的时间

比如说,, 我在2016年1月1日下午11:00进行了交易。添加6小时后,输出应为2016年1月2日上午11点


我该怎么做?谢谢你

DateTime
是PHP中一个非常棒的特性

$string = '1/1/2016 11.00PM';

$date = new DateTime($string);
$interval = new DateInterval('PT6H');
$date->add($interval);

// Now add another 6 hours while we are between 12:00 AM and 6:00 AM
while($date->format('G') >= 0 && $date->format('G') <= 6)
{
    $date->add($interval);    
}

echo $date->format('H:i:s M-j-Y');
更新

在对这段特定代码的逻辑进行了深入研究之后,我们得出结论,在午夜到早上6:00之间完成的任何事务都应该从早上6:00开始增加6个小时(因此,基本上,将其设置为中午)

正常情况下,每隔一次交易增加6小时。但是,如果将这6个小时相加后,时间间隔介于午夜和早上6:00之间,则只应将初始时间和午夜之间的时间量以及其他时间分别相加到早上6:00,也就是说,基本上是将初始值加上12个小时

下面是修改后的代码:

$date = new DateTime($string);
$interval = new DateInterval('PT6H');

if($date->format('G') >= 0 && $date->format('G') <= 6)
{
    $date->setTime(12,0,0);
}
else
{
    $date->add($interval);
    if($date->format('G') >= 0 && $date->format('G') <= 6)
    {
        $date->add($interval);
    }
}

echo $date->format('H:i:s M-j-Y');
示例#2

// input
$string = '1/1/2016 11.00AM';

//output
17:00:00 Jan-1-2016 // this is 5:00 PM
示例#3

// input
$string = '1/1/2016 11.00PM';

//output
11:00:00 Jan-2-2016 // this is 11:00 AM

您应该检查此答案:-添加6小时。如果结果在排除区内,则再添加6(包含区的长度)。谢谢!我假设12.00AM-6.00AM被排除在外?@RedzwanLatif这就是为什么
while($date->format('G')>=0&&$date->format('G'))谢谢你的解释!看来如果我在凌晨2点做交易,它不会正确添加。当我在凌晨2点做交易时,它应该在早上6点增加6个小时。还有什么我可以解决这个问题吗?@RedzwanLatif让我们在这里弄清楚术语。你想在初始日期时间增加6个小时,然后再增加6个小时,以防时间落在我身上到午夜到早上6点之间的时间间隔,对吗?当然,如果日期时间是凌晨2点,那么在总共上午8点的时间间隔内,你会得到另外6个小时。或者我错过了它?
// input
$string = '1/1/2016 11.00AM';

//output
17:00:00 Jan-1-2016 // this is 5:00 PM
// input
$string = '1/1/2016 11.00PM';

//output
11:00:00 Jan-2-2016 // this is 11:00 AM