Edit report at http://bugs.php.net/bug.php?id=54660&edit=1
ID: 54660
Comment by: giorgio dot liscio at email dot it
Reported by: giorgio dot liscio at email dot it
Summary: DateInterval Fatal error: main(): Unknown property
(h)
Status: Feedback
Type: Bug
Package: Date/time related
Operating System: any?
PHP Version: 5.3.6
Block user comment: N
Private report: N
New Comment:
please read carefully because DateInterval is really ambiguous
since it is just introduced in php5.3 can be modified before lot of
users starts to use this lib
what is ambiguous:
i can do, for example: $datetimeobj->diff($datetimeobj2, FALSE); to
obtain a dateinterval with negative values ( read: $obj->h = -1 )
but i can't do DateInterval::createFromDateString("-1 hour");
i don't know how ambiguity will be resolved, but my suggests are:
SOLUTION 1
{
- drop ->invert and allow negative values to ->y ->m ->d ->h ->i ->s
->diff() second parameter works good now
- add a method to dateInterval to invert all values ( ->invertAll() )
that not sets ->invert, but inverts single properties ( $this->h =
$this->h * -1; )
- modify constructor to match the new logic
iso8601 seems do not allow negative single values, but can be good to
have a constructor like this:
public DateInterval::__construct( string $interval_spec , bool
$invertAllValues)
that converts P2Y4DT6H8M in an hypothetically P -2Y -4D T -6H -8M
- drop ->add and ->sub from DateTime class and implement ->change that
offers same functionality and more when used with negative intervals and
positive intervals
}
SOLUTION 2
{
DateInterval properties ymdhis should be always >=0
- DateTime->diff() should not never returns an object with negative
values, but should flag inverted intervals using ->invert = TRUE
- drop ->add and ->sub and implement ->change that offers same
functionality
$a = DateInterval("P1Y");
$datetime->change($a); // add
$a->invert = true;
$datetime->change($a) // subtract
}
i sincerely prefer the first version because mixing negative and
positive single values would be nice
(DateIntervall::createFromDateString("1 year 1 month -10 days"))
but i will like any solution that resolves the ambiguities of this class
Previous Comments:
------------------------------------------------------------------------
[2011-05-04 17:19:09] [email protected]
Please try using this snapshot:
http://snaps.php.net/php5.3-latest.tar.gz
For Windows:
http://windows.php.net/snapshots/
This works fine for me:
derick@whisky:~$ php -v
PHP 5.3.7-dev (cli) (built: May 4 2011 09:16:17) (DEBUG)
<?php
$a = \DateInterval::createFromDateString("1 month 1 hour");
echo $a->h; // ok
$a = \DateInterval::createFromDateString("1 month 0 hour");
echo $a->h; // ok
$a = \DateInterval::createFromDateString("1 month -1 hour");
echo $a->h; // fatal error, ->h is not defined
?>
10-1
------------------------------------------------------------------------
[2011-05-04 16:54:49] giorgio dot liscio at email dot it
Description:
------------
hi,
$a = \DateInterval::createFromDateString("1 month 1 hour");
echo $a->h; // ok
$a = \DateInterval::createFromDateString("1 month 0 hour");
echo $a->h; // ok
$a = \DateInterval::createFromDateString("1 month -1 hour");
echo $a->h; // fatal error, ->h is not defined
Fatal error: main(): Unknown property (h) in ...index.php on line 30
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/bug.php?id=54660&edit=1