#php #datetime #pdo
#php #datetime #pdo
Вопрос:
Я получаю эту ошибку
( ! ) Неустранимая ошибка: Неперехваченное исключение ‘Exception’ с сообщением ‘DateTime::__construct(): не удалось проанализировать временную строку (28.06-2014 07:43:58) в позиции 0 (0): неожиданный символ’ в /Users/matt/Desktop/Likes/forgot/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());
Строка 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());
.
Ответ №1:
Передаваемая вами строка даты не поддерживается анализатором даты и времени. Вы должны создать объект DateTime с помощью createFromFormat . Этот метод позволяет указать пользовательский формат при создании нового объекта DateTime:
$my_dt = DateTime::createFromFormat('m-d-Y H:i:s', $token_created_at);
Если вы все еще получаете сообщение об ошибке, это означает, что ваш $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"
}
Редактировать
Я вижу вашу проблему — строка формата имеет пробел после s
. Строки формата должны точно совпадать:
$my_dt = DateTime::createFromFormat('m-d-Y H:i:s ', $token_created_at);
Ответ №2:
Обновил мой ответ
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;
Комментарии:
1. @user302975 Да, это должна быть переменная. Вы можете присвоить значение переменной и передать его в функцию date_time. Это жестко запрограммировано для вашего удобства.
Ответ №3:
Попробуйте это:
$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');
Это приведет к
2014-06-28 08:43:58