在非对象DateTime上调用成员函数format()

问题描述:

This problem might be common but it seems like I can't find out what I did wrong.

I have two variables the date and time from database which I think is in UTC format and I need to convert to AEST;

$date = message['date']; //25/09/2014
$time = message['time']; //9:00:00

$combined_time = $date . " " . $time;
$schedule_date = DateTime::createFromFormat("Y-m-d H:i:s",$combined_time ,new DateTimeZone("Australia/Melbourne"));
return $schedule_date->format("jS-A-Y H:i:s T");

I got Call to a member function format() on a non-object exception.

You should use ("d/m/Y h:i:s"):

$schedule_date = DateTime::createFromFormat("d/m/Y h:i:s", $combined_time , new DateTimeZone("Australia/Melbourne"));

The given format is wrong because your date-time is as 25/09/2014 9:00:00. Check this example.

You are not creating any object of class so giving you error you need to create class object or use directly.

$schedule_date = new DateTime($date);
return $schedule_date->format("jS-A-Y H:i:s T");

or you need to pass correct format in Datetime() see @The Alpha answer for this

For more read manual :- http://php.net/manual/en/datetime.createfromformat.php

    // convert string to timestamp
    $timeStamp = strtotime($combined_time);
    // create DateTime object use timestamp
    $date = new DateTime();
    $date->setTimestamp($timeStamp);

Then you can use $date->format('Y') to get year...