At the infrastructure: yes, all servers should be UTC, (almost) no question.
As for guessing timezones - I use GeoIP to get the user's approximate location, then figure out the timezone based on that. It is not perfect, but I needed something that does not require JS.