This package exports an isomorphic function that works like
setInterval, but aligns itself to the
start of each day. You might use this client-side to update a UI that shows new information each
day. You might use this server-side, from within a websocket handler, to push new information to the
client when the day changes.
For use from both the browser and Node:
npm install day-start-interval
For use in the browser, you will also need to install
moment-timezone as described
here, and configure your bundler to resolve
that dependency. If you wish to load
moment-timezone from a CDN like JSDelivr, for instance, and
are using Rollup, you might do:
<!-- in your HTML -->
// Part of your Rollup configurationexternal: 'moment-timezone'globals:'moment-timezone': 'moment'
You may also need to configure your bundler to upconvert this module from CJS to ESM e.g. using
rollup-plugin-commonjs (exercise left to the reader). https://github.com/mixmaxhq/day-start-interval/issues/4
tracks adding a ESM build to this project.
First, import the library:
// In the browser:;
// In Node:const setDayStartInterval = ;
Then, determine the user's time zone. The library can't determine when the day starts without this information: as of this writing, it is 2:06pm on September 18th in San Francisco, but already 6:36am on September 19th in Adelaide, Australia!
Client-side, you can use
moment-timezone and use
moment.tz.guess() to figure this out:
;const tz = momenttz;
If you wish to use this library server-side, you can determine the time zone client-side and then pass that to the server (exercise left to the reader).
Does this library expect your code to actually run for more than 24 hours?
I mean… it might, right? Some users keep tabs open forever, and you might even expect them to do so if you're making some sort of dashboard for them.
And if the client is alive for more than 24 hours, than a corresponding websocket process might live for more than 24 hours too. (Theoretically—you should make sure that your client can gracefully reconnect if your websocket servers cycle, the network connection drops, etc!)
But, it's totally possible for
setDayStartInterval to fire much sooner than 24 hours, depending
on when you call it—if you call it at 11:59pm, then it will fire for the first time in just
func throws, that exception will not be caught. You are responsible
for adding your own
func if needed. If
func throws, this library does not
make any guarantees about whether the interval will continue to run.
We welcome bug reports and feature suggestions, as well as contributions!
Please add tests for any changes. You can run the tests continuously as you work by doing
env WATCH=true npm run test.