2014-03-25 23 views
-1

我搜索了SO,但找不到任何相似的东西。PHP DateTime在构造函数中传递变量时出现对象错误

<?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 
?> 

如果由我代替$ ref_date “250314” 一切正常:

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

试过强制转换$ ref_date。 (字符串)$ ref_date。 PHP 5.3.27 ||时区设置。

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

+1

var_dump($ ref_date);'show you? –

+2

您确定'$ ref_date'只是'250314',也就是说,不包含任何额外的(不可打印的)字符? – Aleph

+0

你确定$ ref_date是一个字符串吗? – bitfiddler

回答

0

问题是由于在字符串中的尾随空格引起的。 呼应字符串没有透露这一点:

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

Vardumping从中提取的日期数组透露trainling空间:

<?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! 
?> 

非常感谢您的意见。

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'; 
} 
相关问题