Hai
I have the system with employees having different timezones in their profile. I would like to show the date according to their timezones specified. The GMT time zone values are placed in the database. could you guys help me
Check out PHP's timezone-setting functions, including date_timezone_set
.
in addition to Dav's answer i propose to store all time data in "timestamp" mysql datatype because it automatically handles timezones
Let's say your server is located in the USA and stores dates in the database with local US GMT -7.
So you send the local offset -7 and the offset of the employee country, lets say somewhere in Europe +2.
So basically you just need to know what is -7 -2 and its 9 hours offset, so each date you have stored in the database must be added 9 hours to represent the time in Europe.
This will count the offset:
fnGetOffset($source_gmt_offset ,$fltGmtOffset)
{
$intGmtOffest = $source_gmt_offset - $fltGmtOffset;
if($intGmtOffest <> 0)
{
return $intGmtOffest;
}
}
After you count the offset you just need to get the date from the db and add to it the offset.
Like that:
$intUnixTimeStamp += $intGmtOffest*60*60;
So this is the proper way to do it with PHP.
And if you want to query the server based on user selected time, you need to go back -9 .
Let say:
Your Company local time is some where in USA gmt (-6) and we have an employee at Holland with gmt (+2).
So what you will want to do is:
Save the event date at the company local time at your database.
Now when you query your db for available dates, first check the employee country to get his offset.
Best thing is to apply it on the sql query that should be like:
$symb= "+";
$intGmtInterval= 8;
DATE_FORMAT(CONVERT_TZ(my_event,'+0:00','$symb$intGmtInterval:00'),'%W')
So this actually will add to any date resulted in your main query the 8 hour offset .