Re: [RFC] Duration class
| From: | Tim Düsterhus | Date: | Tue, 14 Jul 2026 08:36:18 +0000 |
| Subject: | Re: [RFC] Duration class | ||
| References: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-131911@lists.php.net to get a copy of this message | ||
Hi
On 2026-07-14 05:20, Pierre Joye wrote:
That would've been my suggestion as well. I think it's only natural that 100% agreement on everything is impossible for a project as widely used as PHP.As for the specific case of “the constructors should be injective functions”, you missed the second half of the quoted sentence: “and also based on our experience of working with dates and times both in PHP and other programming languages”,ok, let's agree to disagree here, it is hard to agree on "experiences". :)
Sorry, I'm not sure I quite understand what you are trying to say here. When discussing a Duration as in stop-watch time, I think it's natural to say “Usain Bolt broke the 100 m world record with 9 seconds 58 hundreths”, which is exactly the fixed-point decimal representation that thealthough native support for fixed-point decimals would certainly made the API nicer.What would be nicer is common practice and prior art(s). The setSecond makes no sense as of now for two reaons: - the limits because an instant is measured using 24 hours, 60 minutes per hour, 60 seconds per minutes etc. does not mean a duration common case do so. Common, and that's barely arguable, a duration is rarely measured like an instant in time. If ever,
fromSeconds() constructor also uses. For longer races one might say “1 minute, 40 seconds and 91 hundreths” rather than “100 seconds 91 hundreths”, but none of the components overflow, and the “subseconds” are never further divided down into millis, micros, nanos, but just use the desired precision directly.
- it is awkward to have nanoseconds in setSeconds out of nowhere. I understand some external factor (other entities) leading to that decision but that creates illogical, inconsistent and confusing semantic boundaries. A box can contain apples does not mean setDimension should use apples with a limit on top. Or an apple can be used with a box that does not make an apple's unit in square feet.As outlined above, I believe this special casing of the “subsecond boundary” is common in the real world and human communication. Best regards Tim Düsterhus