Fatal error: exception exception "Exception" with the message "DateTime :: __ construct (): could not parse the time string

I get this error

(!) Fatal error: Throw an โ€œExceptionโ€ exception with the message โ€œDateTime :: __ construct (): Failed to parse the 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

Trying to do it

//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('mdY H:i:s ', time()); 

Line 17 - $my_dt = new DateTime($token_created_at); and this is my time format 06-28-2014 07:43:58 .

This is how I create token_created_at , $time_gen = date('mdY H:i:s ', time()); .

+10
php datetime pdo
source share
3 answers

The date string you pass is not supported by the DateTime parser. You must create a DateTime object using createFromFormat . This method allows you to specify a custom format when creating a new DateTime object:

 $my_dt = DateTime::createFromFormat('mdY H:i:s', $token_created_at); 

If you still get the error, it means that your $token_created_at not specified in the format you specified:

 $now = date('mdY H:i:s'); //string(19) "06-28-2014 15:00:47" var_dump(DateTime::createFromFormat('mdY 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 . Format strings must match exactly :

 $my_dt = DateTime::createFromFormat('mdY H:i:s ', $token_created_at); 
+11
source share

Updated my answer

 function date_time( $date ) { if( $date == "" ){ return ""; } else { // echo $date; $my_date = DateTime::createFromFormat( 'mdY H:i:s', $date ); // echo '<pre>'; // print_r($my_date); // echo '</pre>'; $new_date = $my_date->format( 'Ymd 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( 'Ymd H:i:s' ); echo $expires_date; //Return current time to match $current_time = date('mdY H:i:s', time()); echo $current_time; 
+2
source share

Try the following:

 $token_created_at = DateTime::createFromFormat("mdY H:i:s", $token_created_at); $my_dt = new DateTime($token_created_at->format('Ymd H:i:s')); $expires_at = $my_dt->modify('+1 hour'); 

It will create

 2014-06-28 08:43:58 
+1
source share

All Articles