Reputation: 939
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
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
Reputation: 9142
Use the createFromFormat
method:
$start_date = DateTime::createFromFormat("U", $dbResult->db_timestamp);
UPDATE
I now recommend the use of Carbon
Upvotes: 18
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
Reputation: 1465
$start_date = new DateTime();
$start_date->setTimestamp($dbResult->db_timestamp);
Upvotes: 0
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
Reputation: 594
change your code to this
$start_date = new DateTime( "@" . $dbResult->db_timestamp );
and it will work fine
Upvotes: 15