I often need to display information based on or influenced by a user\'s actual local time which differs across time zones. Is there a reliable way of getting a user
PHP has both a PECL extension and a PEAR package that can do GeoIP lookups. Assuming the user isn't behind a proxy or NAT of some kind, the database is up-to-date and accurate, and the address is in the database at all, you could get the timezone, and calculate the offset from the server time.
Or, you could just accept that the user's system clock is not 100% accurate, but it's usually very close. All major operating systems have some way of syncing their clocks with network time servers, most of these are turned on be default. If the person has decided to put their computer in the "wrong" time zone, it's probably for a reason (they're traveling, they work with people in another time zone).
If the user has for some reason set their clock to be 10 minutes off, they accept the consequences of time calculations being inaccurate.
Added:
If your server clock is accurate (if not, like HermanD said, fix it if you control the server, complain if you don't) but is not in the right timezone, you can always use PHP ini_set() or date_default_timezone_set() to force your scripts to operate in GMT, regardless of system time zone.