The issue here is you are trying to mix static timing with dynamic timing.

Intervals, such as every minute, every 15minutes, every 30minutes, etc, are static. The amount of time is always the same between 'heartbeats', for these, you could just set a timer with required interval

Where as set times such as noon, or midnight are arbitrary. They change dependent on system clock, timezone, etc. If you create a timer that says 'trigger at midnight', you can't except it to trigger if the system clock jumps from 11:59 to 12:00.