Подтвердить что ты не робот

Неустранимая ошибка: исключение исключение "Исключение" с сообщением "DateTime:: __ construct(): не удалось проанализировать строку времени

Я получаю эту ошибку

(!) Неустранимая ошибка: Исключить исключение "Исключение" с сообщением "DateTime:: __ construct(): Не удалось проанализировать строку времени (06-28-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());.

4b9b3361

Ответ 1

Строка даты, которую вы передаете, не поддерживается парсером DateTime. Вы должны создать объект 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;

Ответ 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