Hello,
I am sorry if my explanation was not clear, I forgot to mention about the background functionality of wp_cron: this is a pseudo-cron (not a real cron), which is fired when visitors come to your site. So, if your website is getting a low number of daily visitors, this type of cron will not fire by itself, and it will start working only when a new visitor comes to your site.
Example: your wp_cron is set to work on 8 PM, but a visitor hits your site only at 10 PM -> the wp_cron process will be launched at 10 PM.
This can be fixed by using server side cron, as advised.
I hope I cleared things up.
Regards.