Местный часовой пояс CodeIgniter по Гринвичу

Мне нужна помощь с веб-сайтом с несколькими часовыми поясами в codeigniter.

конфиг.php:

$config['time_reference'] = 'gmt';
date_default_timezone_set('UTC');

теперь, когда пользователь хочет увидеть событие (веб-сайт предназначен для событий), он показывает даты для своего часового пояса с помощью функции gmt_to_local(), это работает нормально..

Теперь проблема в том, что когда пользователь хочет добавить новое событие, он выбирает дату и время, теперь оно преобразуется в метку времени:

strtotime($event_date);

И проблема в том, что он выбирает дату и время для события в своем часовом поясе, теперь мне нужно преобразовать его в gmt и сохранить в db.

Например, если пользователь находится в UP2(+2:00) и установил 12-25-2012 22:30:00, он будет преобразован в метку времени и сохранен в БД, но это неверно, это следует вычесть 2:00 и сохранить эту метку времени в БД как метку времени 12-25-2012 20:30:00 (это преобразуется в GMT)

Надеюсь, что вы поймете.

Любое решение для этого? Спасибо.


person Mirza Delic    schedule 13.12.2012    source источник


Ответы (1)


В вашей форме события вы должны отправить на сервер скрытый ввод, который будет содержать смещение часового пояса клиента. Вы можете получить его с помощью метода Javascript Date.getTimezoneOffset() (он дает вам смещение в минутах между UTC и местным временем пользователя).

Если вы не можете этого сделать, вы можете сохранить локальный часовой пояс пользователя в БД или задать его в форме события.

Затем в запросе INSERT или UPDATE вы можете использовать DATE_ADD('2012-12-13 19:41:00', [смещение пользователя] MINUTE) для преобразования метки времени. Вы также можете сделать это в php или на стороне клиента при отправке формы...

Например, в PHP:

strtotime($event_date);

дает вам временную метку даты Unix (то есть в секундах). Чтобы преобразовать его в другой часовой пояс, в зависимости от того, как вы получите смещение в минутах с помощью метода javascript, вы можете сделать:

$dbTimestamp = strtotime($event_date) + $_POST['offsetInMinutes']/60;

Если вы получаете смещение в такой форме: «+2:00» или «-6:00», вы можете получить смещение в часах, используя регулярное выражение:

preg_match('/(.*)\:00/', '+2:00', $match)

установит «+2» в $match[1]

person berty    schedule 13.12.2012
comment
Как я могу сделать в php, мне это нужно? - person Mirza Delic; 13.12.2012
comment
хорошо, с этой формой вы можете получить смещение в часах, используя регулярное выражение: preg_match('/(.*)\:00/', '+2:00', $match) установит '+2' в $match [1]. - person berty; 13.12.2012