Php DateTime差异的日期间隔错误

Php DateTime差异的日期间隔错误,php,datetime,datediff,date-comparison,dateinterval,Php,Datetime,Datediff,Date Comparison,Dateinterval,我在比较两个日期时间: //Get the current DateTime $date_now = new DateTime; var_dump($date_now); // 2014-03-10 19:04:29 // I need to subtract 12 hours (I'm using $date_past to fetch $db_date in a request) $date_past = $date_now->sub(new DateInterval("PT12H"

我在比较两个日期时间:

//Get the current DateTime
$date_now = new DateTime;
var_dump($date_now); // 2014-03-10 19:04:29

// I need to subtract 12 hours (I'm using $date_past to fetch $db_date in a request)
$date_past = $date_now->sub(new DateInterval("PT12H"));

// Get the DateTime from $db_date just fetched in database
$alert_date = new DateTime($db_date);
var_dump($alert_date); // 2014-03-10 17:04:00 in my test

// Get the difference
$diff = $alert_date->diff($date_now);
var_dump($diff->format("%H:%I:%S")); //09:59:31
所以我得到09:59:31和$diff->invert==1,这意味着它是一个负值

我看到了这个问题:我认为这是类似的问题,但我无法找到一个解决方案来继续使用->sub()。有什么想法吗

如果你认为这可能是一个时区问题,我检查了我所有的日期时间,他们都有一个时区设置为“欧洲/柏林”,所以我不认为它来自这里


谢谢大家!

问题在于,当您将对象指定给变量时,它是通过引用指定的。所以当你这样做的时候:

$date_past = $date_now->sub(new DateInterval("PT12H"));
变量
$date\u pass
$date\u now
都指向完全相同的引用,修改其中一个引用时,可以同时修改这两个引用。如果您只是回显变量,您会注意到这一点:

$date_now = new DateTime;
$date_past = $date_now->sub(new DateInterval("PT12H"));

echo $date_now->format('c'); // 2014-03-10T00:38:56-06:00
echo $date_past->format('c'); // 2014-03-10T00:38:56-06:00
注意它们是如何打印完全相同的内容的。通常,您要做的是使用
clone

$date_past = clone $date_now;
$date_past->sub(new DateInterval("PT12H"));

echo $date_now->format('c'); // 2014-03-10T12:41:20-06:00
echo $date_past->format('c'); // 2014-03-10T00:41:20-06:00

多谢各位!工作得很有魅力