Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

get user timezone [duplicate]

Possible Duplicate:
How can I determine a web user's time zone?

Which is the best way to do this ? php or javascript.Can someone provide me with some snippets ? thanks.

like image 280
andrei Avatar asked Jan 20 '11 10:01

andrei


2 Answers

This will get you the timezone as a PHP variable. I wrote a function using jQuery and PHP. This is tested, and does work!

On the PHP page where you are want to have the timezone as a variable, have this snippet of code somewhere near the top of the page:

<?php         session_start();     $timezone = $_SESSION['time']; ?> 

This will read the session variable "time", which we are now about to create.

On the same page, in the <head> section, first of all you need to include jQuery:

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script> 

Also in the <head> section, paste this jQuery:

<script type="text/javascript">     $(document).ready(function() {         if("<?php echo $timezone; ?>".length==0){             var visitortime = new Date();             var visitortimezone = "GMT " + -visitortime.getTimezoneOffset()/60;             $.ajax({                 type: "GET",                 url: "http://example.com/timezone.php",                 data: 'time='+ visitortimezone,                 success: function(){                     location.reload();                 }             });         }     }); </script> 

You may or may not have noticed, but you need to change the url to your actual domain.

One last thing. You are probably wondering what the heck timezone.php is. Well, it is simply this: (create a new file called timezone.php and point to it with the above url)

<?php     session_start();     $_SESSION['time'] = $_GET['time']; ?> 

If this works correctly, it will first load the page, execute the JavaScript, and reload the page. You will then be able to read the $timezone variable and use it to your pleasure! It returns the current UTC/GMT time zone offset (GMT -7) or whatever timezone you are in.

You can read more about this on my blog

like image 54
Westy92 Avatar answered Sep 20 '22 12:09

Westy92


On server-side it will be not as accurate as with JavaScript. Meanwhile, sometimes it is required to solve such task. Just to share the possible solution in this case I write this answer.

If you need to determine user's time zone it could be done via Geo-IP services. Some of them providing timezone. For example, this one (http://smart-ip.net/geoip-api) could help:

<?php $ip     = $_SERVER['REMOTE_ADDR']; // means we got user's IP address  $json   = file_get_contents( 'http://smart-ip.net/geoip-json/' . $ip); // this one service we gonna use to obtain timezone by IP // maybe it's good to add some checks (if/else you've got an answer and if json could be decoded, etc.) $ipData = json_decode( $json, true);  if ($ipData['timezone']) {     $tz = new DateTimeZone( $ipData['timezone']);     $now = new DateTime( 'now', $tz); // DateTime object corellated to user's timezone } else {    // we can't determine a timezone - do something else... } 
like image 26
Mikhus Avatar answered Sep 17 '22 12:09

Mikhus