PHP Fatal error: Call to a member function format() on a non-object any idea

11,361

Solution 1

My answer does not directly answer your question, but you can alternatively try this.

You can simply implement this using date and date_default_timezone_set

date_default_timezone_set('America/New_York');

$time = $_POST['order_date'];
$date = date('Y-m-d H', strtotime($time));

However, $_POST['order_date'] should have the valid format to strtotime.

Solution 2

Your $_POST['order_date'] input doesn't seem to be formatted correctly. As the documentation says, DateTime::createFromFormat returns false if the $time parameter doesn't match the given $format string, so a boolean type (non-object).

You should verify your $_POST input and catch those errors via checking

if(!($date instanceof DateTime))
{
    // you, sir, entered an invalid date!
}

to prevent those errors.

Share:
11,361
Helper
Author by

Helper

Updated on June 05, 2022

Comments

  • Helper
    Helper almost 2 years

    I'm trying to convert the received date through $_POST but I got

    PHP Fatal error: Call to a member function format() on a non-object

    Here is my code:

    $time = $_POST['order_date'];
    $date = DateTime::createFromFormat( 'Y-m-d H:i:s', $time, new DateTimeZone( 'America/New_York'));
    $get_data = $date->format( 'Y-m-d H'); //here is the problem
    

    What is the problem with my code?

    Can anybody help please?

  • Helper
    Helper over 9 years
    Thank you. This answer worked like a charm. Now I got the idea. Regards
  • vascowhite
    vascowhite over 9 years
    As DateTime::createFromFormat() returns false on error you can simply do if(!$date){}.
  • vascowhite
    vascowhite over 9 years
    This answer seems to be working around the problem rather than solving it.
  • Sithu
    Sithu over 9 years
    @vascowhite is working around the problem not solving it alternatively, isn't it? SO answers need to meet such kind of strict rules? Well, either strtotime or DateTime::createFromFormat, the correct format must be given. That's why I stated $_POST['order_date'] should have the valid format to strtotime.
  • Sithu
    Sithu over 9 years
    @vascowhite, I think it is just enough to leave comment here. No need downvote.