How do I invalidate cache for a block for anonymous users on a schedule?
At the top of the issue queue of Office Hours is this issue:
Fix javascript in D8-version of office_hours module
The problem is, you need this issue resolved, because for anonymous users javascript has to work.
If you want to build your own module, follow @oknate advice and use a lazy builder in a custom block plugin and install BigPipe to get the javascript part for anonymous logged-in users.
Updated question:
For anonymous users you can instead of disabling the Internal Page Cache set an expires header to the response as suggested by @Berdir's comment. See https://drupal.stackexchange.com/a/196557/47547