millis() returns an

unsigned long.

Whenever you subtract an older time from a newer one, you get the correct

unsigned result. No matter if there was an overflow.

You never need abs() for such calculations.

For ease of understanding think in bytes ( 0.. 255 ), instead of unsigned longs.

Example: If your old time was at 250 and now you're at 5 , you calculate (5 - 250) and interpret the result as an unsigned byte, the result is 11.

abs() might just make it worse (if you are in the wrong data types for intermediate values).

abs() of an unsigned value should not do any harm, but if you think it might help, you should rethink