【问题标题】:Add hours to datetime in PHP在 PHP 中将小时数添加到日期时间
【发布时间】:2016-02-28 11:43:09
【问题描述】:

我有一个名为 $transactiontime 的变量。我想为该变量添加 6 小时。但我需要排除 12.00AM 和 6.00AM 之间的时间。

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

我该怎么做?谢谢

【问题讨论】:

标签: php


【解决方案1】:

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

【讨论】:

  • 谢谢!我假设 12.00AM - 6.00AM 被排除在外?
  • @RedzwanLatif 这就是为什么有while($date-&gt;format('G') &gt;= 0 &amp;&amp; $date-&gt;format('G') &lt;= 6)
  • 感谢您的解释!
  • 似乎如果我在凌晨 2 点进行交易,它不会正确添加。当我在凌晨 2 点进行交易时,它应该增加 6 小时到早上 6 点。无论如何我可以解决这个问题吗?
  • @RedzwanLatif 让我们在这里弄清楚术语。您想在初始日期时间添加 6 小时并再添加 6 小时以防时间落在午夜和早上 6 点之间的时间间隔内,对吧?所以当然,如果日期时间是凌晨 2 点,那么您会再增加 6 个小时,总共是早上 8 点。还是我错过了?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-16
  • 1970-01-01
  • 2015-09-21
  • 1970-01-01
  • 1970-01-01
  • 2011-12-31
相关资源
最近更新 更多