Рассчитать время из часовых поясов в php - PullRequest
0 голосов
/ 16 марта 2010

Hai

У меня есть система, в которой сотрудники имеют разные часовые пояса в своем профиле. Я хотел бы показать дату в соответствии с указанными часовыми поясами. Значения часового пояса GMT помещаются в базу данных. не могли бы вы, ребята, помочь мне

Ответы [ 4 ]

1 голос
/ 16 марта 2010

Допустим, ваш сервер находится в США и хранит даты в базе данных с местным временем по Гринвичу США -7.

Итак, вы отправляете локальное смещение -7 и смещение страны сотрудника, скажем, где-нибудь в Европе + 2.

Так что в основном вам просто нужно знать, что такое -7 -2 и его смещение на 9 часов, поэтому каждую дату, которую вы сохранили в базе данных, нужно добавить на 9 часов, чтобы представить время в Европе.

Это будет считать смещение:

fnGetOffset($source_gmt_offset ,$fltGmtOffset)
{
    $intGmtOffest = $source_gmt_offset - $fltGmtOffset; 
    if($intGmtOffest <> 0)
    {
        return $intGmtOffest;
    }
}

После того, как вы посчитаете смещение, вам просто нужно получить дату из БД и добавить к ней смещение.

Вот так:

$intUnixTimeStamp += $intGmtOffest*60*60;

Так что это правильный способ сделать это с помощью PHP.

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

0 голосов
/ 23 марта 2010

Скажем:

Местное время вашей компании определенное, где в США gmt (-6), и у нас есть сотрудник в Голландии с gmt (+2).

Итак, что вы хотите сделать, это:

  1. Сохраните дату события по местному времени компании в вашей базе данных.

  2. Теперь, когда вы запрашиваете у своей БД доступные даты, сначала проверьте страну сотрудника, чтобы получить его смещение.

    • Если вы работаете в Голландии, то, по вашему мнению, +2, вы знаете, что все даты в вашей базе данных хранятся как время местной компании gmt -8. Так что на самом деле это смещение -6 - + 2 от gmt = -8 Теперь, если мы хотим перейти с серверного времени на сотрудника в Голландии, мы просто добавляем 8-часовое смещение ко времени.

Лучше всего применить его к SQL-запросу, который должен выглядеть так:

$symb= "+";
$intGmtInterval= 8;

 DATE_FORMAT(CONVERT_TZ(my_event,'+0:00','$symb$intGmtInterval:00'),'%W')  

Таким образом, это фактически добавит к любой дате, приведшей к вашему основному запросу, 8-часовое смещение.

0 голосов
/ 16 марта 2010

в дополнение к ответу Дэва я предлагаю сохранить все данные о времени в типе метки времени mysql, поскольку он автоматически обрабатывает часовые пояса

0 голосов
/ 16 марта 2010

Ознакомьтесь с функциями установки часового пояса в PHP, включая date_timezone_set.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...