为什么DateTime :: createFromFormat()失败并在我的第二个例子中返回一个布尔值?

dep*_*erm 14 php string format datetime

当我运行它时,第一个正确创建为日期.第二个失败,返回a boolean,所以我无法格式化.时间是否超出范围?

//works correctly
$startDate = "2015-05-06 10:49:20.637133";
$start = DateTime::createFromFormat('Y-m-d h:m:s.u',$startDate);
echo $start->format('m/d/y');

//doesn't work correctly
$startDate = "2015-05-12 15:49:06.821289";
$start = DateTime::createFromFormat('Y-m-d h:m:s.u',$startDate);
echo $start->format('m/d/y');
Run Code Online (Sandbox Code Playgroud)

Code to reproduce the error

Mar*_*c B 18

检查DateTime::getLastErrors():

php > var_dump(DateTime::createFromFormat('Y-m-d h:m:s',"2015-05-12 15:49:06"));
bool(false)

php > var_dump(DateTime::getLastErrors());
array(4) {
  ["warning_count"]=>
  int(1)
  ["warnings"]=>
  array(1) {
    [19]=>
    string(27) "The parsed date was invalid"
  }
  ["error_count"]=>
  int(1)
  ["errors"]=>
  array(1) {
    [11]=>
    string(30) "Hour can not be higher than 12"
Run Code Online (Sandbox Code Playgroud)

  • 感谢您提供有关“DateTime::getLastErrors()”的信息 (2认同)

Riz*_*123 14

更改h到大H,因为小的是12小时格式和大的是24小时格式.

您可以在手册中查看所有格式.从那里引用:

h 12小时格式的一小时,前导零01到12
小时24小时格式,前导零到00到23

意味着你的代码现在失败了,因为在12小时格式中没有15.

  • 没关系你有Ymd h:m:s ...两个m的事实......第二个应该是我几分钟. (2认同)

Abr*_*ver 7

除了其他答案之外,对于DateTime您理解的标准格式,不需要从格式创建:

$startDate = "2015-05-12 15:49:06.821289";
$start = new DateTime($startDate);
echo $start->format('m/d/y');
Run Code Online (Sandbox Code Playgroud)