Как на PHP определить часовой пояс по IP адресу посетителя?

Можно ли на PHP как то по IP адресу посетителя определить часовой пояс(например чтобы для IP адресов Москвы определялось +3). Я понимаю что можно на JavaScript определить, но можно ли прямо на PHP по IP?


Ответы (2 шт):

Автор решения: Вадим Александру

В данном случае есть два неплохих варианта

Вариант 1:

Получить смещение часового пояса клиента на самой клиентской части и кинуть его на бек.

К примеру:

const offset = new Date().getTimezoneOffset();
console.log(offset); // возвращает разницу по гринвичу в минутах

Плюсы: Вне зависимости от айпи юзера мы получим его часовой пояс.

Минусы: Юзер легко может поменять время на клиенте и у нас будут ложные данные

Вариант 2:

Юзать сторонний сервис для получения данной инфы по апи, благо их сейчас достаточно, не буду наводить конкретные примеры сервисов и реализации самого запроса - эта инфа и так очень легко гуглится.

Плюсы: Простота реализации.

Минусы: Скорее всего вы не угадаете часовой пояс. Некоторые юзеры действительно используют прокси\VPN и тд. из-за чего, у вас будет часовой пояс того региона, кому принадлежит айпи с которого пришел к вам юзер.

Итоги: если есть возможность - используйте первый вариант, еще лучше дать возможность юзеру самому выбрать свой часовой пояс.

→ Ссылка
Автор решения: delikates

Попробуйте использовать либо GeoIP, либо отправлять запрос к специальным сервисам для определения гео-позиции на основе IP-адреса.

Например:

http://www.geoplugin.net/json.gp?ip=<IP-адрес>

Они отдают довольно много информации. Вполне вероятно, что некоторые отдают и часовой пояс сразу. Но, если нет - то Вам достаточно знать город. Далее простой запрос в гугл отдаст часовой пояс.

→ Ссылка