PHP, Codeigniter: How to Set Date/Time based on users timezone/location globally in a web app?


Question

I have just realised if I add a particular record to my MySQL database - it will have a date/time of the server and not the particular user and where they are located which means my search function by date is useless! As they will not be able to search by when they have added it in their timezone rather when it was added in the servers timezone.

Is there a way in Codeigniter to globally set time and date specific to a users location (maybe using their IP) and every time I call date() or time() that users timezone is used.

What I am actually asking for is probably how to make my application dependent on each users timezone?

Maybe its better to store each users timezone in their profile and have a standard time (servers time) and then convert the time to for each user?

Thanks all

1
10
2/16/2010 4:47:20 PM

Accepted Answer

I think the easiest way is define a timezone for internal data storage (your server's time zone or UTC) and convert the time according to the user's time zone when outputting it.

I don't know CodeIgniter so I can't point you to the right functions. One prominent library that is timezone aware is Zend_Date: Working with Timezones I have not worked with these functions yet but they look promising.

However, once you know the user's time zone, it's not difficult to put together an own function that adds/substracts the offset when outputting dates and/or times.

Possibly related question:

4
5/23/2017 12:07:05 PM

It sounds like what you need to do is store all of the date and times in your system as UTC time (used to be called GMT). This is the base time that everything in the world is calculated off of with adjustments. (eg: Central Time is -6 hours off of UTC)

In MySQL you can use UTC_TIMESTAMP() to get the current UTC time as long as your server and DB are configured with the correct times and timezone settings.

In PHP run this to set the timestamp of PHP to UTC (you will run this in your code so put it on every page or in a centralized index file):

date_default_timezone_set('UTC');

Or you can go directly into PHP.INI and tell it to use UTC time globally. (this may not work if you have multiple websites on a single installation of PHP.

And then anywhere in the system you need to get the current UTC time you can just call:

time();

Then for each user in the system you will need to ask them what timezone they live in and then when you display times make the adjustment for that user. So if it is 5:00PM UTC and I live in Easter US (-5) the time would be 5:00 - 5 hours = 12:00PM.

This can be a long process to get right but once you do your users will find it very useful especially internationally.


Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon