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

时间:2018-11-23 17:42:18

标签: php datetime dateinterval

在PHP中添加日期和时间字符串的“最干净”方法是什么?

尽管我已经读过DateTime::add期望DateInterval,但我还是尝试过

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

哪一个不好,什么都没退给$result

要从DateInterval制作'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 个答案:

答案 0 :(得分:1)

DateTime(和DateTimeImmutable)具有modify方法,您可以通过添加20 hours20 minutes来修改时间。

已更新

根据评论,我已经提供了DateTimeDateTimeImmutable的示例,您无需将modify的结果分配给变量,因为它会改变原始变量宾语。而DateTimeImmutable创建一个新实例,并且不变异原始对象。

DateTime

<?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

使用DateTimehttps://3v4l.org/6eon8

DateTimeImmutable

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

输出

  

string(19)“ 2018-10-23 00:00:00”

     

string(19)“ 2018-10-23 20:20:00”

使用DateTimeImmutablehttps://3v4l.org/oRehh

答案 1 :(得分:1)

如果您想向DateTime添加20小时20分钟:

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

您不需要获取add()的结果,只需在add()对象上调用DateTime即可对其进行更改。 add()的返回值是DateTime对象本身,因此您可以链接方法。

请参见DateInterval::__construct,了解如何设置间隔。