As I see it, the more consistent way of dealing with time is to only use UTC time (very similar to GMT in practice, besides, php gmt* function actually are using UTC time) internally, eg date/time stored in persistent storage (db etc) and to use user timezone to display time to each user.
This way, you keep chronology, simplify design and thinking and always display a time that is meaningful to the user, eg, the time in his/here timezone.
In your example, it would not matter what time to display, as you would be displaying the only relevant time, eg, the time it was actually created UTC, just translated to each user's timezone.
And don't worry, time is always flowing, no one can see what did not occur as long as the time reference is consistent. It does not matter if someone sees a different time on his clock, it still can be the same moment.
If you where to deal with guests, you could perform educated guesses about the proper timezone using geolocation and / or browser prefs. And you can still allow timezone switch in your views.
It's also a way to simplify your model as using one single time reference will ease time based comparison across objects and will lower the risk of miss-configuration (one single time setup everywhere).
Carbon is easy to use with laravel, and is a convenient way of working with date/times.