Как на PHP определить часовой пояс по IP адресу посетителя?
Можно ли на PHP как то по IP адресу посетителя определить часовой пояс(например чтобы для IP адресов Москвы определялось +3). Я понимаю что можно на JavaScript определить, но можно ли прямо на PHP по IP?
Ответы (2 шт):
В данном случае есть два неплохих варианта
Вариант 1:
Получить смещение часового пояса клиента на самой клиентской части и кинуть его на бек.
К примеру:
const offset = new Date().getTimezoneOffset();
console.log(offset); // возвращает разницу по гринвичу в минутах
Плюсы: Вне зависимости от айпи юзера мы получим его часовой пояс.
Минусы: Юзер легко может поменять время на клиенте и у нас будут ложные данные
Вариант 2:
Юзать сторонний сервис для получения данной инфы по апи, благо их сейчас достаточно, не буду наводить конкретные примеры сервисов и реализации самого запроса - эта инфа и так очень легко гуглится.
Плюсы: Простота реализации.
Минусы: Скорее всего вы не угадаете часовой пояс. Некоторые юзеры действительно используют прокси\VPN и тд. из-за чего, у вас будет часовой пояс того региона, кому принадлежит айпи с которого пришел к вам юзер.
Итоги: если есть возможность - используйте первый вариант, еще лучше дать возможность юзеру самому выбрать свой часовой пояс.
Попробуйте использовать либо GeoIP, либо отправлять запрос к специальным сервисам для определения гео-позиции на основе IP-адреса.
Например:
http://www.geoplugin.net/json.gp?ip=<IP-адрес>
Они отдают довольно много информации. Вполне вероятно, что некоторые отдают и часовой пояс сразу. Но, если нет - то Вам достаточно знать город. Далее простой запрос в гугл отдаст часовой пояс.