为什么在第一个例子中我得到的是分和秒 00:00 而在第二个例子中,当没有指定小时时,我得到的是实际时间?
如果在创建对象的日期未定义该值,我想始终将其值设为 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', "3.4.2012")->format('Y-m-d H:i:s');
输出: 2012-04-03 23:05:45
预期输出: 2012-04-03 00:00:00
最佳答案
这将给出您想要的格式:
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
引用:http://php.net/manual/en/datetime.createfromformat.php
! Resets all fields (year, month, day, hour, minute, second, fraction and timzone information) to the Unix Epoch Without !, all fields will be set to the current date and time.
换句话说,没有感叹号!
,如果不指定H(小时)、i(分钟)、s(秒)中的任何一个,则当前OS系统运行时间使用 PHP 脚本。
如果给出了 H
、i
或 s
中的任何一个元素,则不使用系统时间。实际上,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
关于PHP 日期时间对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20338971/