PHP Datetime子函数在PHP7上停止工作。 1个

时间:2019-03-15 15:53:21

标签: php phpunit

终于该跳起来了!下面的代码用于在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。

1 个答案:

答案 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");

希望它对您有帮助。