User specified Timezone

This mission is almost impossible. Players do not stay at one timezone therefor associating a timezone with a player can result in misleading and confusing output.

What you can do is move all time to be expressed at a specific time base, lets say UTC, and write some JS that will translate the UTC time into the user’s local time based on its browser/os settings by using the relevant JS APIs.

You can see this kind of system in action in the wordpress “make core” site https://make.wordpress.org/core/tag/agenda/ where they use a shortcode to express times that should be localized.

Obviously this will not work where you can not run JS like emails, so maybe for this you can ask users to set their “normal” timezone.

sidenote: players are usually actually very good in taking TZ into account, and while you can localize time to make it more convenient, people still need to know if it is work time, night or other significant time in the day. Therefor if you go with this kind of localization you need to be careful and leave the users some ability to express their local times when needed.