代码之家  ›  专栏  ›  技术社区  ›  Urs

如何在PHP中正确添加日期和时间(字符串)?

  •  0
  • Urs  · 技术社区  · 7 年前

    尽管已经读过了 DateTime::add 期待 DateInterval ,我试过了

    $date = new \DateTime('17.03.2016');
    $time = new \DateTime('20:20');
    $result = $date->add($time);
    

    $result

    作出决定 从…起 '20:20' ,我只找到了非常复杂的解决方案。。。

    也许我应该用时间戳?

    $date = strtotime($datestring);
    $timeObj = new \DateTime($timestring);
    // quirk to only get time in seconds from string date
    $time = $timeObj->format('H') * 3600 + $timeObj->format('i') * 60 + $timeObj->format('s');
    $datetime = $date+$time;
    $result = new \DateTime;
    $result->setTimestamp($datetime);
    

    在我的例子中,这将返回所需的结果以及正确的时区偏移。但你怎么认为,这是强大的吗?有更好的办法吗?

    2 回复  |  直到 7 年前
        1
  •  1
  •   Ron Dobley    7 年前

    如果你想把20小时20分钟加到 DateTime

    $date = new \DateTime('17.03.2016');
    $date->add($new \DateInterval('PT20H20M'));
    

    你不需要得到结果 add() 使命感 添加() 日期时间 对象将更改它。的返回值 添加() 日期时间 对象本身,以便可以链接方法。

    看见 DateInterval::__construct

        2
  •  1
  •   steadweb    7 年前

    DateTime DateTimeImmutable )有一个 modify 20 hours 20 minutes .

    更新

    日期时间 和 日期时间不可变 根据所做的评论,您不需要指定 修改 因为它会使原始对象发生变化,所以将其转换为变量。鉴于 日期时间不可变 创建一个新实例,不改变原始对象。

    日期时间

    <?php
    
    $start = new DateTimeImmutable('2018-10-23 00:00:00');
    echo $start->modify('+20 hours +20 minutes')->format('Y-m-d H:i:s');
    
    // 2018-10-23 20:20:00
    

    使用 日期时间 : https://3v4l.org/6eon8

    <?php
    
    $start = new DateTimeImmutable('2018-10-23 00:00:00');
    $datetime = $start->modify('+20 hours +20 minutes');
    
    var_dump($start->format('Y-m-d H:i:s'));
    var_dump($datetime->format('Y-m-d H:i:s'));
    

    字符串(19)“2018-10-23 20:20:00”

    日期时间不可变 : https://3v4l.org/oRehh

    推荐文章