Link to home
Start Free TrialLog in
Avatar of ScriberUK
ScriberUK

asked on

Echo PHP DateTime Object Element

Below in a simple DateTime Object, I would like to echo the date
2010-09-01 00:00:00
by using something:

echo gmdate($row['WHENTORUNNEXT']->date);

Open in new window


But for some reason it doesn't work???

Help!

Array
(
    [HHMMOFDAYTORUN] => 15
    [WHENTORUNNEXT] => DateTime Object
        (
            [date] => 2010-09-01 00:00:00
            [timezone_type] => 3
            [timezone] => Europe/London
        )

)

Open in new window

Avatar of Ray Paseur
Ray Paseur
Flag of United States of America image

use var_dump() to print the $row variable and post that here, please.
$ts = strtotime($row['WHENTORUNNEXT']->date);

echo date('d/m/Y', $ts);
Please see the man page here:
http://us.php.net/manual/en/function.gmdate.php

gmdate() expects a timestamp and a format statement.  The timestamp is what strtotime() will do for you.  I have an article on DATETIME handling here at EE that may be helpful to you.
https://www.experts-exchange.com/Web_Development/Web_Languages-Standards/PHP/A_201-Handling-date-and-time-in-PHP-and-MySQL.html
Avatar of ScriberUK
ScriberUK

ASKER

Very close spsenthil!

echo date('Y-m-d h:i:s', $ts); prints "1970-01-01 01:00:00" but it should print "2010-09-01 00:00:00"?

Below is the var_dump()

Thanks!
array(2) {
  ["HHMMOFDAYTORUN"]=>
  int(15)
  ["WHENTORUNNEXT"]=>
  object(DateTime)#19 (3) {
    ["date"]=>
    string(19) "2010-09-01 00:00:00"
    ["timezone_type"]=>
    int(3)
    ["timezone"]=>
    string(13) "Europe/London"
  }
}

Open in new window

This works:

echo gmdate('Y-m-d H:i:s', strtotime('2010-09-01 00:00:00'));

Giving: 2010-08-31 23:00:00

But this doesn't:

echo gmdate('Y-m-d H:i:s', strtotime($row['WHENTORUNNEXT']->date));

Giving: 1970-01-01 00:00:00
Avatar of Dave Baldwin
"strtotime('2010-09-01 00:00:00')" is intended for converting text expressions like Tuesday, September, etc. to time.  It doesn't and isn't intended to convert a numeric expression like that.

And if you get"1970-01-01 00:00:00" or "1969-12-31 00:00:00",  then you gave 'gmdate' a 0 or a null.  That value is the begining of the Unix Epoch and represents a Unix timestamp of 0.
ASKER CERTIFIED SOLUTION
Avatar of Chris Stanyon
Chris Stanyon
Flag of United Kingdom of Great Britain and Northern Ireland image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
strtotime() will return FALSE on failure.  When that happens you can print out the variable that caused the failure.

Example:

$timestamp = strtotime($string);
if ($timestamp === FALSE) echo "$string is bogus";

This produced the expected output.  Not sure why var_dump() shows me nothing?
<?php // RAY_temp_thing.php
error_reporting(E_ALL);
echo "<pre>";

/* FROM THE POST AT EE
Array
(
    [HHMMOFDAYTORUN] => 15
    [WHENTORUNNEXT] => DateTime Object
        (
            [date] => 2010-09-01 00:00:00
            [timezone_type] => 3
            [timezone] => Europe/London
        )

)
*/

// MAKE A DATETIME OBJECT AND LOAD IT UP
$d = new DateTime();
$d->setDate(2010, 9, 1);
echo $d->format('Y-m-d');

// WONDER WHY THIS DOES NOT TELL US MORE?
var_dump($d);

Open in new window

Ray,

Yeah, that baffled me too? Didn't seem to matter whether you var_dump or print_r the DateTime object - it doesn't show any info.

The class definition doesn't seem to expose any properties - only methods. Had a feeling this might be down to the version of PHP I'm running (5.2.6) but didn't have time to test further!

It seems the only way to get the data back out of the object is to called the various methods - format(), getTimezone(), getTimestamp() etc.

http://www.php.net/manual/en/class.datetime.php






Thank you very much for your help guys (and gals)! I have been away on business and haven't had a chance to check yet but it is just very nice to know I'm not doing something silly :)
The clean and simple solution is, as ChrisStanyon posted:
echo $row['WHENTORUNNEXT']->format("Y-m-d H:i:s");

Open in new window

<?php

$row['WHENTORUNNEXT']->date  = "2010-09-01 00:00:00";
 
$full_date = $row['WHENTORUNNEXT']->date;

$explode = explode(" ", $full_date);

$date_part = explode("/", $explode[0]);

$unix_ts = mktime(0,0,0, $date_part[2], $date_part[2], $date_part[3]);

echo gmdate("M d Y", $unix_ts);
?>
This question has been classified as abandoned and is being closed as part of the Cleanup Program. See my comment at the end of the question for more details.