终于该跳起来了!下面的代码用于在PHP 5.6上工作
我移至7.1,但失败了。我究竟做错了什么?
$expectedToday = new DateTime();
$expectedToday->sub(new DateInterval('PT5H'));
$this->assertEquals($expectedToday, functionThatReturnsDateTimeSuccessfully()));
我明白了
Failed asserting that two DateTime objects are equal.
--- Expected
+++ Actual
@@ @@
2019-03-15T08:35:21+0000
所以功能ThatReturnsDateTime成功地正常工作。
但是,当我注释掉第二行
$expectedToday = new DateTime();
// $expectedToday->sub(new DateInterval('PT5H'));
$this->assertEquals($expectedToday, functionThatReturnsDateTimeSuccessfully()));
我明白了
Failed asserting that two DateTime objects are equal.
--- Expected
+++ Actual
@@ @@
-2019-03-15T13:38:31+0000
+2019-03-15T08:38:31+0000
所以我的问题是-我做错了什么?为什么sub看起来会清空整个DateTime对象的内容?如果此功能令人厌烦,为什么不建议弃用?
--- 更新 ---
添加不会发生相同的问题,不会。这就是sub。
答案 0 :(得分:1)
您可以检查参考链接Why can't I access DateTime->date in PHP's DateTime class? Is it a bug?
因此,要解决此问题,您应该按照以下格式设置日期:
$expectedToday = new DateTime();
$expectedToday->sub(new DateInterval('PT5H'));
$this->assertEquals($expectedToday->format('Y-m-d H:i:s'), "2019-03-10 15:15:15");
希望它对您有帮助。