How are major sites detecting timezone? [duplicate

2019-03-09 15:57发布

问题:

This question already has an answer here:

  • Determine a user's timezone 24 answers

Facebook, myspace, MSN, craigslist; all detect timezone and show times and dates correctly without ever submitting a form or reloading a page.

How do they do it? I have a pretty large site and have people publishing articles which need to display correct times (uploaded 3pm or 6pm depending on timezone).

Preloaders? Javascript? Loading the page and reloading it? My site currently has the person enter the site and upon first entry it reloads the page with updated information of their timezone through javascript. This is however a pretty annoying thing and am looking for another alternative. I know that upon loading I can send out an ajax request and then have it update everything throughout the site with the correct timezone for the user BUT if I have to click back, or reload it asks if I'd like to send the information again which is also bad. So how do they do it?

I was playing around with Facebook, changing my location on my local machine and it seemed to update the timezone every 5 minutes or so.

I am php, zend-framework based.

回答1:

there is no "timezone" request header, or something like that, so, you can't with php

but with javascript you can get the timezone offset of the client, then you could make a xmlhttp request to send informations to php

see this: http://www.pageloom.com/automatic-timezone-detection-with-javascript

pretty easy!

hope this helps



回答2:

You could find user country using IP address geocoding and then have some array with timezones for each country. I think there are no other ways. You can fetch the user country like this:

<?php
$file = file_get_contents("http://api.hostip.info/get_html.php?ip=".$_SERVER['REMOTE_ADDR']."");
?>

Then just use explode for the $file.

Look also these Stackoverflow codes:
How can I determine a web user's time zone?
Any Reliable API available to determine User's city and country from IP address



回答3:

I believe they use IP addressing and Geo-location. That's all there is to it.



回答4:

First off, you should work with UTC across all levels and if you don't know a time zone mark the time as such. Then on local client you can adjust the time with the timezoneOffset

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset



回答5:

Try this php code this gives better precision

  <?php  $ip = $_SERVER['REMOTE_ADDR'];
    $json = file_get_contents("http://api.easyjquery.com/ips/?ip=".$ip."&full=true");
    $json = json_decode($json,true);
    $timezone = $json[localTimeZone];?>


回答6:

jsTimezoneDetect provides a great library for automatic timezone detection via javascript.