On Mon, Aug 22, 2022 at 4:22 AM Daniel Wolfe <d...@the-wolfeden.com> wrote:
> For the first four instances, the function works as intended since the > timestamps are non-negative numbers. However, for the fifth example, > since the date is before 1970, the timestamp is going to be negative > resulting in an ostensible array key which will also be negative. The > floor technique would instead return a positive array key. > > …since the time of the day for each of these dates is the same (i.e., > 1:46 AM), it *should* calculate 6,360 seconds since midnight for each > instance. It does this correctly for the first four instances, but the > fifth instance reports -80,040 seconds—a meaningless result. The floor > technique would return the same result as the others. > Both these examples and any others can already be solved very easily in userland PHP, either ad-hoc specific to what you're doing or by user implementations of floor_div and floor_mod. No doubt you are already aware it's as simple as: function floor_mod($a, $b) { return $a - ($b * floor($a / $b)); } That said, while my preference is *usually* "don't add stuff to PHP which users can easily do themselves", I do think in the case of certain ubiquitous and useful scalar operations, there's a good case for it being supported out the box. And this has been done, many times - functions like str_contains and array_key_last were things which could be easily done in userland and easily supported through polyfills for older PHP versions. The bit I think I might not like is these being functions, floor_div and floor_mod. They may be easily confused with the similarly named and existing fdiv and fmod functions. Wouldn't new operators, // and %% respectively, be preferable? -Dave