PHP DateTime对象

Kra*_*rab 4 php

为什么在第一个例子中我得到分钟和秒00:00,在第二个例子中,当没有指定小时时,我得到了实际时间?
如果在创建对象的日期没有定义值,我想要始终为0.

echo DateTime::createFromFormat('j.n.Y H', "3.4.2012 22")->format('Y-m-d H:i:s');
Run Code Online (Sandbox Code Playgroud)

输出: 2012-04-03 22:00:00

echo DateTime::createFromFormat('j.n.Y', "3.4.2012")->format('Y-m-d H:i:s');
Run Code Online (Sandbox Code Playgroud)

输出: 2012-04-03 23:05:45

预计输出: 2012-04-03 00:00:00

jac*_*ouh 8

这将给你希望的格式:

echo DateTime::createFromFormat('!j.n.Y', "3.4.2012")->format('Y-m-d H:i:s');


Output: 2012-04-03 00:00:00
Excpected output: 2012-04-03 00:00:00
Run Code Online (Sandbox Code Playgroud)

参考:http://php.net/manual/en/datetime.createfromformat.php

!将所有字段(年,月,日,小时,分钟,秒,分数和时区信息)重置为Unix Epoch Without!,所有字段都将设置为当前日期和时间.

换句话说,没有感叹号!,如果未指定H(小时),i(分钟)和s(秒)中的任何一个,则使用运行PHP脚本的当前OS系统时间.

如果给出了His的任何元素,则不使用系统时间,在effet中,0将填充所有未指定的时间元素.例如:

echo DateTime::createFromFormat('j.n.Y H', "3.4.2012 22")->format('Y-m-d H:i:s');
//=> 2012-04-03 22:00:00

echo DateTime::createFromFormat('j.n.Y i', "3.4.2012 22)->format('Y-m-d H:i:s');
//=> 2012-04-03 00:22:00

echo DateTime::createFromFormat('j.n.Y s', "3.4.2012 22")->format('Y-m-d H:i:s');
//=> 2012-04-03 00:00:22
Run Code Online (Sandbox Code Playgroud)