Hi

Am 2026-06-29 22:38, schrieb ignace nyamagana butera:
How about this

Duration::fromHours(5)->dividedBy(5); //returns Duration::fromHours(1);
and
Duration::fromHours(50->dividedInto(Duration::fromHours(1)); // returns
['factor' => 5, 'remainder' => Duration::fromSeconds(0)];

Duration::dividedInto in my example returns an array but I would have no
issue if it would return a DTO instead.
This way the naming seems easy to remember IMHO

- "by" -> integer,
- "into" -> duration

and it reads naturally I think.

That is a great suggestion, thank you. I agree this reads pretty naturally, because the “divide into” requires the presence of a “unit” to feel complete, whereas the “divide by” doesn't. Derick also confirmed that the suggestion sounds reasonable to him.

To remain consistent with `bcdivmod()`, the function should return a 2-tuple (i.e. `array{0: int, 1: Duration}`). This makes destructuring very convenient:

    [$fullDurations, $remainder] = $oneHour->divideInto($sevenMinutes);

see https://news-web.php.net/php.internals/124098 for the previous discussion.

I don't plan to add `divideInto()` to the initial set of methods in PHP 8.6, but would be open to it if anyone feels having it right away is useful or necessary. Please speak up in that case. And please also do if you disagree with the divideBy() + divideInto() pair.

Best regards
Tim Düsterhus

Reply via email to