I believe this avoids the weird issues with setInterval but does not use as much CPU as requestAnimationFrame.
I made a decimal time clock here https://github.com/wegry/decimal-time where I used `requestAnimationFrame`. Admittedly, it probably uses more CPU than it should.
I think I had an issue `setInterval` similar to https://stackoverflow.com/a/729943 talking about here
> In this Fiddle, you can clearly see that the timeout will fall behind, while the interval is almost all the time at almost 1 call/second (which the script is trying to do). If you change the speed variable at the top to something small like 20 (meaning it will try to run 50 times per second), the interval will never quite reach an average of 50 iterations per second.
I got nerd-sniped into making a calendar following the original rules and tried to see how far I can push it with modern astronomy, and this is the result.
Things would had been easier if our world behaved like i.e. Stardew Valley year (4 months=seasons, 28 days/4 weeks each month, no leap years, and the start of each season mean an abrupt change of conditions)
In the last (or so) chapter he explicitly discusses decimal time, and the beauty of being able to calculate and reason about the calendar.
He also made some suggestions on using 20-hour days as a way of making it slightly more compatible to the 24-hour day.