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

时间:2015-05-12 20:36:52

标签: php string datetime format

当我运行它时,第一个正确地创建为日期。第二个失败,返回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');

Code to reproduce the error

3 个答案:

答案 0 :(得分:17)

检查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"

答案 1 :(得分:13)

h更改为大H,因为小的格式为12小时格式,而大格式格式为24小时格式。

您可以在manual中查看所有格式。从那里引用:

  

h 12小时格式一小时,前导零点01到12    H 24小时格式一小时,前导零到23

现在意味着您的代码失败,因为12小时格式中没有15个。

答案 2 :(得分:3)

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

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