php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Request #62911 Add DateTime::__toString()
Submitted: 2012-08-23 18:15 UTC Modified: 2012-12-18 21:19 UTC
Votes:7
Avg. Score:4.1 ± 1.0
Reproduced:6 of 6 (100.0%)
Same Version:1 (16.7%)
Same OS:1 (16.7%)
From: bdurand-php at ssji dot net Assigned: willfitch (profile)
Status: Wont fix Package: Date/time related
PHP Version: Irrelevant OS:
Private report: No CVE-ID: None
Have you experienced this issue?
Rate the importance of this bug to you:

 [2012-08-23 18:15 UTC] bdurand-php at ssji dot net
Description:
------------
Hello,

I want to have a default behavior to convert an instance of the class DateTime into a string. I mean implement the method __toString() in the DateTime class.

The default format should be ISO8601 IMHO, but we can add an attribut to define the default format to use for __toString() and format() method.

Greetings.

Test script:
---------------
<?php
$datetime = new DateTime();
echo $datetime;

Expected result:
----------------
2012-08-23T20:11:21+0200

Actual result:
--------------
PHP Catchable fatal error:  Object of class DateTime could not be converted to string in php shell code on line 1

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2012-08-27 15:09 UTC] willfitch@php.net
-Assigned To: +Assigned To: willfitch
 [2012-08-27 15:15 UTC] willfitch@php.net
This is a good idea.  I will add this, but will also add an RFC as I'd like the 
input of other internals on the output format.
 [2012-08-27 15:17 UTC] derick@php.net
We have had this a few times now, and we should not do this. The main reason is that we will never be able to come to a consensus on which format to show. It certainly shouldn't have anything that destroys the encoded timezone identifiers.

It's perfectly possible to subclass DateTime yourself and add a __toString() that returns the datetime in your preferred format though.
 [2012-08-27 15:17 UTC] derick@php.net
-Status: Assigned +Status: Wont fix
 [2012-08-27 15:24 UTC] willfitch@php.net
Would it be worth investing time in adding a setter/constructor option for a 
default format type? Setting no default could fallback to one of the constants 
(which still doesn't resolve the non-consensus issue).
 [2012-08-27 17:27 UTC] bdurand-php at ssji dot net
The timezone can be defined in the constructor, with the directive tz php.ini, or with date_default_timezone_get() function.

A DateTime is a string in fact, so it's logic to have a string cast available. Which format is more standard than ISO format? Another common format is the timestamp, but it can not represent all dates.
Other languages did this behavior ​​like python. Why PHP can't?

I know that I can subclass any (core) class... it's not the problem here.
 [2012-08-27 17:50 UTC] willfitch@php.net
It's not a matter of whether PHP can or not; it's a matter of gathering a 
consensus among developers on what standard *should* be default.  I personally 
agree with adding __tostring, but this needs to be proposed in an RFC, which I 
will do tonight.
 [2012-09-01 10:18 UTC] willfitch@php.net
I have reopened this as I've introduced an RFC here: 
https://wiki.php.net/rfc/datetime_tostring.
 [2012-09-01 10:18 UTC] willfitch@php.net
-Status: Wont fix +Status: Re-Opened
 [2012-12-18 21:19 UTC] willfitch@php.net
-Status: Re-Opened +Status: Wont fix
 
PHP Copyright © 2001-2018 The PHP Group
All rights reserved.
Last updated: Fri Nov 16 11:01:25 2018 UTC