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

2022-08-30 17:36:26

当我运行此命令时,第一个被正确创建为日期。第二个失败,返回一个,所以我无法格式化。时间是否超出范围?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


答案 1

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

答案 2

将 更改为大,因为小的是 12 小时格式,而大的格式是 24 小时格式。hH

您可以在手册中看到所有格式。还有一句话:

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

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


推荐