Date times always store in the database as GMT. Also, date time fields always convert themselves to the local time of the user. To counteract this you would have to make a formula to take the date time and multiple it by the user's time zone to get back to GMT. The problem compounds in that you can't reference the user time zone in a formula so I've done in the past is to replicate the field with a picklist field that I can use.
Also, time offsets switch for a lot of the world twice a year with daylight savings time. So you might have to update the field when that happens or build into the formula a check to see if today() is between the daylight start time or end time to add +1 or not.
If your users are in a bunch of different times zone that'll be rough but it would go something like this: