Как преобразовать часовой пояс Facebook в пользовательскую строку - PullRequest
0 голосов
/ 09 февраля 2012

Я работаю над интеграцией Facebook в своем приложении.

Facebook возвращает часовой пояс пользователя в формате, аналогичном для Индии, его

5.5

Но существующие часовые пояса сохраняются в базе данных в формате

 +05:30

Любые функции или предложения алгоритмов для этого преобразования.

спасибо.

Ответы [ 2 ]

2 голосов
/ 09 февраля 2012

Этот файл немного длинный, но он добавляет необходимые предшествующие нули и т. Д., Если это требуется.

$num = -5.5;
$res = ($num < 0 ? '-' : '+') . (abs($num) < 10 ? '0' : '') . abs((int)$num) . ':';
// --> -05:
$mins = round((abs($num) - abs((int)$num)) * 60);
// --> 30
$res .= ($mins < 10 ? '0' : '') . $mins;
echo $res;
// -05:30
1 голос
/ 09 февраля 2012

Easy peasy (допустим, $ a = 5,5):

$tz = ($a > 0 ? '+' : '-') . ((int) $a) . ':' . (($a - (int)$a)*60)

Первый бит дает вам знак - или + (левый / правый часовой пояс), во-вторых, приведя $ a к (int), вы потеряете дробныйpart и третий бит сначала получают дробную часть (я уверен, что для этого есть функция php, но я пришел из C в основном так: 5.5 - (int) 5.5 = 5.5 - 5 = 0.5).Дробная часть выражается в часах (5,5 часов - это 5 часов и 30 минут), поэтому в основном 0,5 * 60 дает вам дробную часть в минутах.

РЕДАКТИРОВАТЬ: Вот более чистая (однострочная) версия:

$time = sprintf("%+03d:%2d", (int)$a, abs($a-(int)$a)*60);

Этот в значительной степени самый простой.Спасибо, Инхан, за указание на детали abs ():

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