This question is an exact duplicate of:
If you can log in to https://www.icloud.com and inspect your calendar, that will tell you if the issue is on the server end with missing data (or a failure of your account) or if the phone just can't get a good sync from the server.
The steps to troubleshoot both are a little different, but we'd love you to ask that question once you've figured out where the problem lies.
The updates for my events in iCloud and iPhone differ by a day due to the difference in timezone. My iPhone's timezone is set to Singapore time. How do I set my iCloud timezone to Singapore time as well? iCloud only has a few timezones for us to choose from.
Even though the timezone was set correctly on a Mac, an iPhone and in iCloud settings, syncing across devices has always been off by a couple of hours for me.
Turns out, the time zone, though specified, was disabled for Calendar.
To fix this, click the gear icon in the upper right corner and choose Preferences:
Go to Advanced and make sure the first checkbox is ticked.
Click Save and enjoy your timezone.
When you log in to iCloud you should be able to select Singapore's timezone.
Good luck as it's not that easy to click your timezone! Using the Zoom feature (Preferences -> Accessiblity) might help.