【问题标题】:add hours:min:sec to date in PHP在 PHP 中添加小时:分钟:秒到日期
【发布时间】:2016-01-07 08:42:38
【问题描述】:

我正在尝试在日期中添加 hh:mm:ss。我该怎么做?

我尝试了以下方法,但是当小时是字符串时它可以工作,但是当添加时间类似于 MySQL 日期时间时它不起作用。

$new_time = date("Y-m-d H:i:s", strtotime('+5 hours'));

我正在尝试解决以下问题:

$timeA= '2015-10-09 13:40:14'; 

$timeB = '03:05:01';  // '0000-00-00 03:05:01'

输出:

$timeA + $timeB = 2015-10-09 16:45:15 ?

如何添加?

【问题讨论】:

    标签: php mysql date add


    【解决方案1】:

    使用DateInterval():

    $timeA = new DateTime('2015-10-09 13:40:14');
    $timeB = new DateInterval('PT3H5M1S'); // '03:05:01'; 
    $timeA->add($timeB);
    echo $timeA->format('Y-m-d H:i:s');
    

    您需要将时间分解为正确的 DateInterval 格式,但使用 explode() 很容易做到这一点;

    这可能是这样的:

    $parts = array_map(function($num) {
        return (int) $num;
    }, explode(':', '03:05:01'));
    
    $timeA = new DateTime('2015-10-09 13:40:14');
    $timeB = new DateInterval(sprintf('PT%uH%uM%uS', $parts[0], $parts[1], $parts[2]));
    $timeA->add($timeB);
    echo $timeA->format('Y-m-d H:i:s');
    

    Demo

    【讨论】:

    • 在我的数据库中,值将是 '03:05:01' 以这种格式显示我为所有人转换?
    • 您可以将日期时间格式分解为更小的部分并动态构建日期。但这比这还多。
    • 那么如果我需要在这个格式中添加第二个日期 ''2015-10-09 13:40:14' @john
    • 嗯,你做同样的事情
    【解决方案2】:

    您也可以使用以下方法将时间转换为秒:Convert time in HH:MM:SS format to seconds only?

    $time = '03:05:01';
    $seconds = strtotime("1970-01-01 $time UTC");
    

    然后你可以添加秒数

    $currentTime = '2015-10-10 13:40:14';
    $newTime = date("Y-m-d H:i:s", strtotime( $currentTime.'+'.$seconds.' seconds'));
    

    如果您更喜欢使用@John Conde 提供的 DateTime 对象,这里有两种方法可以将时间字符串转换为格式:

    $formattedTime = preg_replace("/(\d{2}):(\d{2}):(\d{2})/","PT$1H$2M$3S","03:05:11");
    

    或者,当您从数据库中读取它时:

    select concat(hour(last_modified),'H',minute(last_modified),'M',second(last_modified),'H') from people;
    

    所以更通用的代码方法是:

    $initial = 'some time';
    $interval = 'the interval value';
    
    $initialTime = new DateTime($initial);
    $intervalTime = new DateInterval($interval);
    $initialTime->add($intervalTime);
    echo $initialTime->format('Y-m-d H:i:s');
    

    【讨论】:

      【解决方案3】:
       print date('Y-m-d H:i:s',strtotime($timeA." +03 hour +05 minutes +01 seconds"));  
      

      应该也可以。

      所以:

      $timeA= '2015-10-09 13:40:14'; 
      
      $timeB = vsprintf(" +%d hours +%d minutes +%d seconds", explode(':', '03:05:01')); 
      
      print date('Y-m-d H:i:s',strtotime($timeA.$timeB));
      

      可以解决。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-21
        • 2016-05-28
        • 2011-12-31
        • 1970-01-01
        • 2011-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多