为什么date_create_from_format总是为我返回false?

时间:2013-12-26 19:50:03

标签: php datetime

我不是一个php编码器,但命运决定我需要通过它。

$vote_date = date_create_from_format("H:i:s d.m.y", $last_vote_date_str); //$last_vote_date_str is 19:45:12 25.12.13

if ($vote_date == false)
    echo "<span style='color:red'>Error: Unable to parse the last vote date ($last_vote_date_str) -> (".date_format($vote_date, "Y-m-d H:i:s").")!<br><br></span><br>";

这是我一直得到的输出:Unable to parse the last vote date (19:45:12 25.12.13) -> ().")!

我不明白为什么会这样。我多次重新检查这种日期格式,我认为这是正确的。 有什么想法吗?

P.S。 echo var_dump($last_vote_date_str);的结果为string(26) "19:45:12 25.12.13"

我试着这样做:

$temp_last_vote_str = "";
for ($j = 0; $j < strlen($last_vote_date_str); $j++)
if ($last_vote_date_str[j] == '0' || $last_vote_date_str[j] == '1' || $last_vote_date_str[j] == '2' || $last_vote_date_str[j] == '3' || $last_vote_date_str[j] == '4' || $last_vote_date_str[j] == '5' || $last_vote_date_str[j] == '6' || $last_vote_date_str[j] == '7' || $last_vote_date_str[j] == '8' || $last_vote_date_str[j] == '9' || $last_vote_date_str[j] == ':' || $last_vote_date_str[j] == '.' || $last_vote_date_str[j] == ' ')
    $temp_last_vote_str += $last_vote_date_str[j];
$last_vote_date_str = $temp_last_vote_str;

但是在&gt; _&lt;

之后,last_vote_date_str变为空

2 个答案:

答案 0 :(得分:3)

您的var_dump()输出显示string(26) "19:45:12 25.12.13"。它应该说string(17)。因此,实际的$last_vote_date_str字符串中有9个隐藏字符,这导致函数无效。

将以下代码行添加到脚本顶部,然后再次刷新页面以检查var_dump()输出:

header('Content-Type: text/plain');

这会将文档的Content-Type设置为明文,并显示所有字符,您可以轻松找出导致错误的原因。

答案 1 :(得分:1)

由于您有一些“不可见”字符,您可以使用正则表达式删除它们:

$last_vote_date_str = trim(preg_replace('~[^\d:.]~', ' ', $last_vote_date_str));

上面的代码会移除所有不是数字的字符,:.,空格。