Req #60302 [Asn->Csd]: DateTime::createFromFormat should new static(), not new self()

From: Date: Sun, 02 Aug 2020 23:44:05 +0000
Subject: Req #60302 [Asn->Csd]: DateTime::createFromFormat should new static(), not new self()
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-228380@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=60302&edit=1 ID: 60302 Updated by: derick@php.net Reported by: kontakt at beberlei dot de Summary: DateTime::createFromFormat should new static(), not new self() -Status: Assigned +Status: Closed Type: Feature/Change Request Package: Date/time related PHP Version: Irrelevant Assigned To: derick Block user comment: N Private report: N New Comment: Automatic comment on behalf of github@derickrethans.nl Revision: http://git.php.net/?p=php-src.git;a=commit;h=90434d7fe3ac204b56b85cf8ca606e7dd8cf27ac Log: Fixed bug #60302: DateTime::createFromFormat should new static(), not new self() Previous Comments: ------------------------------------------------------------------------ [2017-03-24 06:59:32] heiglandreas@php.net Hey @seld - I hope you fixed that code-snippet to this: public static function createFromFormat($a, $b, $c = null) { $date = $c ? parent::createFromFormat($a, $b, $c) : parent::createFromFormat($a, $b); $newDate = new static('@'.$date->format('U')); $newDate->setTimezone($date->getTimezone()); return $newDate; } Before the timezone was not set due to the fact that the timezone is ignored when the first parameter contains a timezone or an offset. And a timestamp always contains the timezone UTC by definition… ------------------------------------------------------------------------ [2012-05-14 10:09:57] seld@php.net I added this in my subclass. Works well as a workaround, but it would be nice to have it in code indeed. public static function createFromFormat($a, $b, $c = null) { $date = $c ? parent::createFromFormat($a, $b, $c) : parent::createFromFormat($a, $b); return new static('@'.$date->format('U'), $date->getTimeZone()); } ------------------------------------------------------------------------ [2011-11-14 21:51:54] derick@php.net Had a quick look at this, but it wasn't as simple as I thought. Needs some more investigation. ------------------------------------------------------------------------ [2011-11-14 20:00:54] kontakt at beberlei dot de Description: ------------ I want to extend DateTime, but without DateTime::createFromFormat, actually creating instances from my class, i.e. "MyDateTime::createFromFormat" this is rather problematic. Test script: --------------- <?php class MyDateTime extends DateTime { } $d = MyDateTime::createFromFormat('Y-m-d', '2011-01-01'); echo get_class($d); Expected result: ---------------- MyDateTime Actual result: -------------- DateTime ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=60302&edit=1

« previous php.bugs (#228380) next »