Re: [PHP-DEV] [RFC] Duration class

[email protected] (Tim Düsterhus) Sat, 4 Jul 2026 00:16:19 +0200
Newsgroups php.internals
Message-ID <[email protected]>
Hi

On 7/3/26 22:45, Marc B. wrote:
> An alternative would be to use the same sign for nanoseconds as for
> seconds (while 0 seconds is neither positive or negative)

Yes, this is effectively mentioned in the “Design Considerations” 
section of the RFC.

> "... if you are interested in absolute values, you have the magnitude
> right there and can ignore the `$negative` flag."
> 
> No I can't
> * adding two durations does NOT guaranties a value greater than the two
> * passing a negative duration as timeout might throw
> * ...

The use cases you listed there are all passing the Duration object 
somewhere else, which I do not consider to be a case of “if you are 
interested […]”.

The quoted sentence if referring to situations where your code is the 
end user of the Duration object and extracts the contents from it for 
further processing. And in those situations a sign-magnitude 
representation makes processing easier, because you have a single 
authoritative source of the sign, not one in each component and because 
you can extract the magnitude right away, without needing to flip the 
sign of each component.

> This does not answer the meaning difference of `seconds` vs.
> `nanoseconds` - it's confusing naming that `seconds` is the total amount
> of seconds in this duration but `nanoseconds` is the number of fractions
> of a second.

A value-object, such as Duration, is uniquely described by the sum of 
its properties. And in this case, it's quite literally the sum of the 
$seconds and $nanoseconds.

I'm afraid I don't see how one would get the assumption that $seconds 
would redundantly be equal to ($nanoseconds / 1_000_000_000) or 
something like that when the object only has $seconds and $nanoseconds 
properties without also having $milliseconds, $minutes, or something 
else. The confusion would also be quickly cleared up just by looking at 
the object and seeing that the $nanoseconds value is always smaller than 
1 billion.

In my opinion renaming the $nanoseconds to $fractionalNanoseconds would 
greatly decrease the ergonomics of the class.

Best regards
Tim Düsterhus