PaulS:
But I'd need to run the device more than 50 days(hopefully, it's battery powered), so would the internal timer overflow?
Your watch overflows every day. When was the last time that caused you a problem?
To be more informative: overflow of micros() or millis() result is not a problem so long as you always deal in time-differences, and that these time differences are less than the wrap-around time. You should always use this kind of idiom:
if (millis() - prev_time >= DELAY)
The difference between two time values will still be valid across a wrap-around, so this will always work (assuming DELAY is representable as an long)
If you do things this way it will break at the wrap-around:
if (millis() >= prev_time + DELAY)
[ Oh yes, the other thing, delay() is itself a loop, which is why it offers no efficiency benefit - you can go and look at the code of delay() if you want, this is open-source - often the best way to answer questions about the code ]