Alex
Alex

Reputation: 939

PHP DateTime __construct() Failed to parse time string (xxxxxxxx) at position x

I had this construction error when trying to creating a new DateTime object using a timestamp:

Exception: DateTime::_construct(): Failed to parse time string (1372622987) at position 8 (8): Unexpected character in DateTime->_construct()

The object creation code is:

$start_date = new DateTime( "@{$dbResult->db_timestamp}" );

Where $dbResult->db_timestamp is a valid unix timestamp taken from a database. The timestamp in question was:

1372622987

I would understand this error for invalid formats being passed, but this is a genuine timestamp.

The reason this is very strange: I since ran a script to create a new DateTime object with the timestamp passed in as a hard coded value, and it reported no errors.

This seems to have been a one off, but I need an explanation if there is one, as I can't afford for this to happen again.

Upvotes: 68

Views: 153866

Answers (6)

pankaj
pankaj

Reputation: 1906

you can use Carbon Method for this. This solution also works for Excel Import using csv file.

Carbon::createFromFormat('d/m/Y', $row['scheduled_start_at'])->format('Y-m-d') 

Upvotes: 0

Rob W
Rob W

Reputation: 9142

Use the createFromFormat method:

$start_date = DateTime::createFromFormat("U", $dbResult->db_timestamp);

UPDATE

I now recommend the use of Carbon

Upvotes: 18

Sam Deering
Sam Deering

Reputation: 368

This worked for me.

   /**
     * return date in specific format, given a timestamp.
     *
     * @param  timestamp  $datetime
     * @return string
     */
    public static function showDateString($timestamp)
    {
      if ($timestamp !== NULL) {
        $date = new DateTime();
        $date->setTimestamp(intval($timestamp));
        return $date->format("d-m-Y");
      }
      return '';
    }

Upvotes: 1

Bastien D
Bastien D

Reputation: 1465

$start_date = new DateTime();
$start_date->setTimestamp($dbResult->db_timestamp);

Upvotes: 0

saamorim
saamorim

Reputation: 3905

You should use setTimestamp instead, if you hardcode it:

$start_date = new DateTime();
$start_date->setTimestamp(1372622987);

in your case

$start_date = new DateTime();
$start_date->setTimestamp($dbResult->db_timestamp);

Upvotes: 99

Abani Meher
Abani Meher

Reputation: 594

change your code to this

$start_date = new DateTime( "@" . $dbResult->db_timestamp );

and it will work fine

Upvotes: 15

Related Questions