2014-02-10 2 views
0

Мне нужно показать дату активности пользователя в соответствии с текущим часовым поясом. Мой подход -Преобразование времени GMT в локальное время с использованием смещения часового пояса в php

  1. Получение смещения часовой пояс от javascript и сохранение его в таблице профиля пользователя.
  2. Когда пользователь вошел в систему, получив смещение часового пояса.
  3. текущая дата работает нормально с часовым поясом offset-

$offsetDiff = $_SESSION['TimeZone']*60;

$UserDateTime = time() + $offsetDiff;

$currentDate = date('Y-m-d',$UserDateTime);

  1. Dateo другой, то сегодня не работает должным образом -

$offsetDiff = $_SESSION['TimeZone']*60;

$UserDateTime = '2014-02-10 08:58:00'; + $offsetDiff;

$monthUser = date('Y-m-d',$UserDateTime);

Может кто-нибудь пожалуйста, дайте мне знать, как Я показываю правильную дату в соответствии со смещением часового пояса?

+0

Почему бы не использовать объекты ['DateTime'] (http://www.php.net/manual/en/book.datetime.php) и передать [' DateTimeZone'] (http: //www.php. net/manual/en/class.datetimezone.php) конструктору при создании экземпляра? – Havelock

ответ

1

Вы можете преобразовать специфическое смещение в DateTimeZone:

$offset = '-0500'; 
$isDST = 1; // Daylight Saving 1 - on, 0 - off 
$timezoneName = timezone_name_from_abbr('', intval($offset, 10) * 36, $isDST); 
$timezone = new DateTimeZone($timezoneName); 

Затем вы можете использовать его в конструктор DateTime, например,

$datetime = new DateTime('2012-04-21 01:13:30', $timezone); 

или сеттер:

$datetime->setTimezone($timezone); 

В последнем случае, если $ DateTime был построен с другим часовым поясом, дата/время будет преобразован в указанный часовой пояс.

+0

спасибо @ hizbul25, но его даёт ошибку fatol «Ловкая фатальная ошибка: объект класса DateTime не может быть преобразован в строку в» –

+0

Хорошо, попробуйте с этим, http://simonholywell.com/post/2013/12/convert -utc к локальной time.html – hizbul25