致命错误:消息'DateTime :: __ construct()的未捕获异常'Exception':无法解析时间字符串

10 php datetime pdo

我收到这个错误

(!)致命错误:带有消息'DateTime :: __ construct()的未捕获异常'Exception':无法解析位置0(0)处的时间字符串(06-28-2014 07:43:58):/中的意外字符用户/ matt /桌面/喜欢/忘记/ activate.php在第17行

当试图这样做

//DB query
$stmt = $con->prepare("SELECT token_created_at from reset WHERE token = :urltoken");
$stmt->bindValue(':urltoken', $_GET['token']);
$stmt->execute();
$stmt->setFetchMode(PDO::FETCH_ASSOC);
while($row = $stmt->fetch()) {
     $token_created_at = $row['token_created_at'];
}

//Remove after testing
echo $token_created_at;

$my_dt = new DateTime($token_created_at);

//Modify error
$expires_at = $my_dt->modify('+1 hour');

//Return current time to match
$current_time = date('m-d-Y H:i:s ', time());
Run Code Online (Sandbox Code Playgroud)

第17行是$my_dt = new DateTime($token_created_at);,这是我的时间格式06-28-2014 07:43:58.

我就是这样产生token_created_at,$time_gen = date('m-d-Y H:i:s ', time());.

Chr*_*n P 12

DateTime解析器不支持您传递的日期字符串.您必须使用createFromFormat创建DateTime对象.此方法允许您在创建新的DateTime对象时指定自定义格式:

$my_dt = DateTime::createFromFormat('m-d-Y H:i:s', $token_created_at);
Run Code Online (Sandbox Code Playgroud)

如果您仍然收到错误,表示您$token_created_at的格式不符合您指定的格式:

$now = date('m-d-Y H:i:s'); //string(19) "06-28-2014 15:00:47"

var_dump(DateTime::createFromFormat('m-d-Y H:i:s', $now));
object(DateTime)#1 (3) {
  ["date"]=>
  string(19) "2014-06-28 15:00:47"
  ["timezone_type"]=>
  int(3)
  ["timezone"]=>
  string(13) "Europe/Berlin"
}
Run Code Online (Sandbox Code Playgroud)

编辑

我看到你的问题 - 格式字符串后面有空格s.格式字符串必须完全匹配:

$my_dt = DateTime::createFromFormat('m-d-Y H:i:s ', $token_created_at);
Run Code Online (Sandbox Code Playgroud)