在PHP中添加小时到日期时间

时间:2016-02-28 11:43:10

标签: php

我有一个名为$transactiontime的变量。我想为该变量添加6个小时。但我需要排除上午12点到早上6点之间的时间。

例如, 我在1/1/2016 11.00PM进行了一次交易。添加6小时后,输出应为2/1/2016 11.00AM

我该怎么做?谢谢

1 个答案:

答案 0 :(得分:3)

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

这会输出所需的

11:00:00 Jan-2-2016

<强> 更新

在我们广泛discussion in chat关于这段特定代码的逻辑之后,我们得出结论,在午夜 6:00 AM之间完成的任何交易应该从 6:00 AM 开始增加6个小时(所以,基本上,将它设置为 midday )。

其他每笔交易通常会增加6个小时。但是,如果在添加这6小时之后,时间间隔介于午夜 6:00 AM 之间,则只需 initial 之间的相应时间。 午夜,其余应添加到 6:00 AM ,即 基本 仅添加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');

示例#1

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

//output
12:00:00 Jan-1-2016 // this is midday

示例#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