php 致命错误:未捕获的异常 'Exception' 带有消息 'DateTime::__construct(): 无法解析时间字符串
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/24466794/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Fatal error: Uncaught exception 'Exception' with message 'DateTime::__construct(): Failed to parse time string
提问by Christian P
I get this error
我收到这个错误
( ! ) Fatal error: Uncaught exception 'Exception' with message 'DateTime::__construct(): Failed to parse time string (06-28-2014 07:43:58 ) at position 0 (0): Unexpected character' in /Users/matt/Desktop/Likes/forgot/activate.php on line 17
( ! ) 致命错误:未捕获的异常 'Exception' 带有消息 'DateTime::__construct(): 无法解析时间字符串 (06-28-2014 07:43:58) 在位置 0 (0): 中的意外字符'第 17 行的 Users/matt/Desktop/Likes/forgot/activate.php
When trying to do this
尝试执行此操作时
//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());
Line 17 is $my_dt = new DateTime($token_created_at);
and this is my time format 06-28-2014 07:43:58
.
第 17 行是$my_dt = new DateTime($token_created_at);
,这是我的时间格式06-28-2014 07:43:58
。
This is how I generate token_created_at
, $time_gen = date('m-d-Y H:i:s ', time());
.
这就是我生成token_created_at
, 的方式$time_gen = date('m-d-Y H:i:s ', time());
。
回答by Christian P
The date string you're passing is not supportedby the DateTime parser. You must create a DateTime object by using createFromFormat. This method allows you to specify the custom format when creating a new DateTime object:
DateTime 解析器不支持您传递的日期字符串。您必须使用createFromFormat创建一个 DateTime 对象。此方法允许您在创建新的 DateTime 对象时指定自定义格式:
$my_dt = DateTime::createFromFormat('m-d-Y H:i:s', $token_created_at);
If you're still getting an error that means that your $token_created_at
is not in the format you specified:
如果您仍然收到错误,这意味着您$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"
}
Edit
编辑
I see your problem - the format string has a space after s
. The format strings must match exactly:
我看到您的问题 - 格式字符串后有一个空格s
。格式字符串必须完全匹配:
$my_dt = DateTime::createFromFormat('m-d-Y H:i:s ', $token_created_at);
回答by Abhineet Verma
Updated my answer
更新了我的答案
function date_time( $date ) {
if( $date == "" ){
return "";
} else {
// echo $date;
$my_date = DateTime::createFromFormat( 'm-d-Y H:i:s', $date );
// echo '<pre>';
// print_r($my_date);
// echo '</pre>';
$new_date = $my_date->format( 'Y-m-d H:i:s' );
return $new_date;
}
}
$save = date_time('06-28-2014 07:43:58');
$my_dt = new DateTime( $save );
//Modify error
$expires_at = $my_dt->modify('+1 hour');
$expires_date = $my_dt->format( 'Y-m-d H:i:s' );
echo $expires_date;
//Return current time to match
$current_time = date('m-d-Y H:i:s', time());
echo $current_time;
回答by fortune
Try this:
尝试这个:
$token_created_at = DateTime::createFromFormat("m-d-Y H:i:s", $token_created_at);
$my_dt = new DateTime($token_created_at->format('Y-m-d H:i:s'));
$expires_at = $my_dt->modify('+1 hour');
This will generates
这将产生
2014-06-28 08:43:58