在构造函数中传递变量时PHP DateTime对象错误

时间:2014-03-25 21:02:22

标签: php datetime

我搜索了SO,但找不到任何类似的东西。

<?php
  $ref_date = $day['Date'];     // $ref_date is picked up from an array
  echo $ref_date;               // prints "250314" so data is correct
  $date = DateTime::createFromFormat('dmy', $ref_date);
  var_dump($date);              // result FALSE
  echo $date->format('Y-m-d');  // Fatal error since $date not created
?>

如果我用“250314”替换$ ref_date,一切正常:

<?php
   $date = DateTime::createFromFormat('dmy', "250314"); // DateTime Object created
?>

尝试使用$ ref_date进行类型转换。 (字符串)$ ref_date。 PHP 5.3.27 ||时区设定。

我一定错过了一些非常明显的东西?

2 个答案:

答案 0 :(得分:0)

您可以尝试使用此代码:

//$day['Date'] = '250314'; //this is only for test.
$ref_date  = (int)$day['Date'];
if($ref_date>0){
    $date = DateTime::createFromFormat('dmy', $ref_date);
    echo $date->format('Y-m-d');
} else {
    echo '$day[Date] is bad value';
}

答案 1 :(得分:0)

问题是由于字符串中的尾随空格引起的。 回应字符串并不能说明这一点:

<?php
 echo $ref_date;    // 250314
?>

Vardumping从中提取日期的数组显示了训练空间:

<?php
  $ref_date = $day['Date'];  // $ref_date is picked up from an array
  var_dump($day)             // ["Date"]=> string(7) "260314 "
  // remove trailing space:
  $ref_date = rtrim($day['Date'];
  // now DateTime Object created!
?>

非常感谢您的评论。