|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2008-07-17 16:17 UTC] tj at systisoft dot com
Description:
------------
If you want to create a DateInterval of 36000 seconds (10 hours) the creation will fail because you have a limit of 4 chars in the format accepted by the constructor.
Up to days you can do the "carry over" calculation for yourself (But not for months or years), but if you get an offset in seconds from a source you cannot control it would be nice if you could just do:
$date->add(new DateInterval('PT' . $seconds . 'S'));
Now you have to check if seconds exceeds the limit an if it exceeds the limit you have to recalculate yourself. That is not nice from a user point of view.
Reproduce code:
---------------
$d = new DateTime('2008-01-01 10:00:00 UTC');
$d->add(new DateInterval('PT36000S'));
echo $d->format(DATE_ISO8601), PHP_EOL;
Expected result:
----------------
2008-01-01T20:00:00+0000
Actual result:
--------------
PHP Fatal error: Uncaught exception 'Exception' with message 'DateInterval::__construct(): Unknown or bad format (PT36000S)' in /Users/tobias/test.php:2
Stack trace:
#0 /Users/tobias/test.php(2): DateInterval->__construct('PT36000S')
#1 {main}
thrown in /Users/tobias/test.php on line 2
Fatal error: Uncaught exception 'Exception' with message 'DateInterval::__construct(): Unknown or bad format (PT36000S)' in /Users/tobias/test.php:2
Stack trace:
#0 /Users/tobias/test.php(2): DateInterval->__construct('PT36000S')
#1 {main}
thrown in /Users/tobias/test.php on line 2
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Mon Nov 03 22:00:01 2025 UTC |
Just an example when whis is awkward: I get an offest from a time zone an have to add it to a DateTime. The offset was taken from the time zone via getOffset(). Lets assume the offset is positive (easy test if not). $d->add(new DateInterval('PT' . $offset . 'S'))); will fail once the offset is over 9999 seconds. While it is not really necessary to have the limit removed, it is just awkward for a user that he always has to care about this limit when handling durations he gets from sources he can not control. There will always be a limit you have to take care of but a limit of 9999 seconds is reached very fast, if you get durations in seconds.You can also just do: $dateTime->add("718231 seconds");Also php -r '$d = new DateTime("2005-03-15 12:22:29-0000"); $d->add("36000 seconds"); var_dump($d->format(DATE_ISO8601));' gives to me: PHP Warning: DateTime::add() expects parameter 1 to be DateInterval, string given in Command line code on line 1 Warning: DateTime::add() expects parameter 1 to be DateInterval, string given in Command line code on line 1 So I don't think this is a solution for now.