У нас есть система сражений, где люди могут выбрать время матча, чтобы бросить вызов другому игроку. Чтобы создать совпадение, пользователь должен выбрать дату. В настоящее время пользователь выбирает день, час, минуту и час / час из выпадающего списка. Если пользователь выбирает 20.05.2012 в 13:00, система добавляет часы и минуты с начала дня. Вот быстрый пример, чтобы лучше понять, о чем я говорю:
$time = strtotime('today', $inputdate);
$time = $time + $hours + $minutes;
значение $hours
изменяется, если пользователь выбирает AM или PM. Это довольно просто:
Все работало нормально, пока у людей не начались проблемы с часовым поясом. Например, если игрок A создает матч в 13:00, то игрок B увидит, что матч начинается в 13:00, но у него / нее будут разные часовые пояса!
Проблема в том, что я не знаю проблемы: /
Я не знаю, как исправить проблему с часовым поясом. Я создавал функции в надежде, что все упадет вместе, но не повезло.
Что у меня есть:
- Профили пользователей имеют параметры часового пояса.
- Функция, которая получает необработанную временную метку и возвращает отформатированное время на основе часового пояса пользователя.
- Функция, которая получает метку времени и преобразует ее в другую метку времени
на основе часового пояса пользователя.
Я потерян и не могу решить проблему, я могу написать код, но сейчас я не думаю, что логично. Мне потребовался один час, чтобы написать это и попытаться объяснить, как я мог, так как я сам не знаю, как заставить это работать. Некоторые советы приветствуются.
Мне нужна функция для преобразования метки времени в UTC-5:
function input_date($timestamp)
{
global $vbulletin;
$timestamp = (int)$timestamp;
if (strlen((string)$timestamp) == 10)
{
$hour = 3600.00;
$offset = $vbulletin->userinfo['timezoneoffset'];//sample -8
$ds = (int)$vbulletin->userinfo['dstonoff'];//DST
$fluff = $hour*($offset+5.00);
$timestamp = $timestamp+$fluff+($ds*$hour);
return $timestamp;//return timestamp in UTC-5 format..
}
else
{
return 0;
}
}