使用从 createFromFormat 创建的值添加到日期时间,不返回预期值


Adding to DateTime with value created from createFromFormat not returning expected value

我正在玩PHP中的DateTime功能,我遇到了一个我无法解释的绊脚石。

给定以下两段代码,我希望它们会输出相同的值 (2001-01-01),但第二个代码块反而输出自代码运行之日起 1 年(今天为 15-01-2016)。如何让第二个代码块输出预期值?

$date = new DateTime('2001-01-01');
$date->add(new DateInterval('P1Y'));
$date->format('d-m-Y'); // 01-01-2000, works as expected.
$date = new DateTime();
$date->createFromFormat('Y-m-d', '2001-01-01');
$date->add(new DateInterval('P1Y'));
$date->format('d-m-Y'); // 15-01-2016, output not what is expected.

我在OSX 10.10上使用PHP 5.6.4,使用Homebrew安装。

首先,

我没有得到与您相同的输出:

01-01-2002
15-01-2016

第一个例子应该很清楚,你创建一个DateTime对象并为其添加 1 年,以便从01-01-2001开始它得到01-01-2002

在第二个也很容易,你只是忘记从createFromFormat()分配值,所以DateTime只使用当前日期,例如 15-01-2015并增加 1 年。

所以只需更改它:

$date->createFromFormat('Y-m-d', '2001-01-01');

对此:

$date = $date->createFromFormat('Y-m-d', '2001-01-01');