arboles
arboles

Reputation: 1331

PHP displaying stored time data, and storing time data while accounting for different timezones

I am creating this post, to get confirmation that i am understanding the process correctly, and also to get feedback on a few minor details on solving the issue of post times being displayed and stored correctly for users in various time-zones.

Storing the time

First step is getting the users timezone as a GMT offset format using a javascript function, and storing it in a session variable. For example, the $timezone variable will store GMT -4

$timezone=$_SESSION['time'];

Next, Once i have my users timezone. When the user makes a post, I store the post time in mysql database, I will need to store it as a UTC format. How do i do this? Currently when I store the time data. it is in the following way. My stamp field is datetime format, and i would like to leave it as such if possible.

INSERT INTO posts (stamp) VALUES (now())

What function do i use instead of now() to get the UTC format which will then be inserted into my database? I assume that I need to use a php function which will use the $timezone to produce the UTC date.

Displaying the time

Next, Once the UTC date is stored in the db. I need to display the data to the user based on the $timezone variable we set.

So when I display the time, I currently do

echo date('F d', strtotime($list1['stamp']));

Once i have stored the data as UTC time, this will display the UTC time, but i need to show the user the UTC offset for their timezone, so I will need to convert $list['stamp'] in UTC time to a the users timezone using $timezone. What function do i user for this?

tl:dr This should be all I need to make this work. let me know if you see any suggestions, or items that i have not accounted for, and if you know what functions I need to use to convert the time to UTC to store in the database, and what function to use to convert the UTC time to display user, using the $timezone variable.

Upvotes: 0

Views: 264

Answers (1)

maiorano84
maiorano84

Reputation: 11980

For inserting UTC time into the database:

INSERT INTO posts (stamp) VALUES (UTC_DATE())

UPDATE: This will only insert the YYYY-MM-DD into your database. If you need time as well, then use:

INSERT INTO posts (stamp) VALUES (UTC_TIMESTAMP())

Then for printing the date according to timezone:

$date = date_create($list1['stamp'], timezone_open($timezone)); //$timezone='Pacific/Nauru';
echo date_format($date, 'F d');

That should help get you started. Learn more about PHP's DateTime Class for Object Oriented Methods, and cleaner programming in general.

Upvotes: 1

Related Questions