I think you're worrying about the wrong thing here. "Now" is always
the same moment everywhere, it does not matter what timezone is
currently active when it is recorded, only what timezone is active
when it is displayed. As long as you have USE_TZ=True, all your
datetimes will be stored in the database in UTC.
So, the important thing is setting the appropriate current timezone.
As you've discovered, you can perhaps discern the timezone using
javascript. We have a snippet of javascript that determines TZ and
populates a hidden field in the login form with the browser determined
TZ.
At login, this extra parameter is pulled out if available, and
compared to the setting on the users profile. If the users profile has
no current TZ setting, we update their profile with the determined
settings. If the user has manually specified a timezone, we don't
update it or overwrite it.
Finally, we have a small piece of middleware that changes the active
timezone to that indicated on the user's profile, orto the server time
zone if nothing is indicated or the user is not logged in.
Sadly, this isn't code I can share, but we are talking around 40 LOC total.
Cheers
Tom