如何在DateTime

时间:2018-02-08 01:05:25

标签: php datetime

我的日期和时间是分开的,所以我将它们组合在一起

$mergeDateTime = new DateTime($date.' '.$time);
$currentDateTime = $mergeDateTime->format('d-m-Y H:i A);

我正在尝试将5 hours减去它,例如今天的日期为08-02-2018 04:00 AM,当它被减去时应为07-02-2018 11:00 PM

我尝试的是$newDate = date('d-m-Y H:i A', strtotime($currentDateTime)- (5 * 3600));

但它返回的结果与我期望的结果不同。 提前感谢您的帮助!

更新

我认为已经没事了

我尝试了这段代码date('d-m-Y H:i A', strtotime($mergeDateTime->format('d-m-Y H:i A')) - 60 * 60 * 5);但是在测试它时,例如11-02-2018 10:30 PM它应该是05:30 PM,但日期相同,但我收到31-12-1969 20:00 PM

看起来如果结果是在相同的日期,它会像那样返回。

3 个答案:

答案 0 :(得分:0)

我找到了this link

的解决方案

我试过这个

date('d-m-Y H:i A', strtotime($mergeDateTime->format('d-m-Y H:i A')) - 60 * 60 * 5);

** 更新

关于我的问题,如果他们的日期相同,那么我的合并日期和时间始终为12 hours format而不是24 hours,因此我将H设为h现在它工作正常

答案 1 :(得分:0)

您可以查看DateTime::sub()方法,同时确保设置正确的时区。

要说清楚,你想要做这样的事情:

$tz = new DateTimeZone('America/Los_Angeles'); // See: http://php.net/manual/en/timezones.php
$dt = new DateTime('now', $tz);
$di = new DateInterval('P5H');  // See DateInterval documentation for interval_spec given here
$currentDateTime = $dt->format('d-m-Y H:i A');
$dt->sub($di); // You can't use the return value here, since this modified the $dt object and returns it for chaining
$previousDateTime = $dt->format('d-m-Y H:i A');  // This now contains the new time

答案 2 :(得分:0)

有很多方法,一些答案可能会得到相同的结果.... 继承人我的1美分..
   $currentDateTime = $mergeDateTime->format('d-m-Y H:i:s); $currentDate = date('d-m-Y', strtotime($currentDateTime)); $currentTime = date('H:i:s', strtotime($currentDateTime)); $hour_5 = '05:00:00';

$a = new DateTime($currentTime);
$b = new DateTime($hour_5);
$diff = $a->diff($b);
$updated_date = $diff->format("%H:%i:%s");
$new_date_time = $currentDate.' '.$updated_date;

我还没有对它进行过测试,但是应该给你一个想法......希望这有效