Определение часового пояса

Тема в разделе "PHP", создана пользователем yeaahhh, 4 июл 2011.

Модераторы: latteo
  1. yeaahhh

    yeaahhh

    Регистр.:
    8 май 2008
    Сообщения:
    278
    Симпатии:
    11
    Друзья, хочу сделать универсальное время на сайте.. Чтобы для каждого пользователя время было индивидуально - соответствовало его текущему местному времени..
    Подскажите, как лучше организовать?
    Ручное указание времени пользователем при регистрации - отпадает..
    Поискав в инете, нашёл getTimezoneOffset.. Реализуется ли это через данную функцию? или может быть есть более лцчший способ? Заранее большое спасибо!
     
  2. zavu

    zavu

    Регистр.:
    24 сен 2010
    Сообщения:
    180
    Симпатии:
    14
    Код:
    <body onLoad="myclock()">
    <script language="JavaScript">
    <!--
    function myclock()
    {
    ndata=new Date()
    hours= ndata.getHours();
    mins= ndata.getMinutes();
    secs= ndata.getSeconds();
    if (hours < 10) {hours = "0" + hours }
    if (mins < 10) {mins = "0" + mins }
    if (secs < 10) {secs = "0" + secs }
    datastr =hours+":" + mins+":" +secs
    document.clockexam.clock.value = " "+datastr;
    setTimeout("myclock()", 1000);
    }
    -->
    </script>
    <form name="clockexam"><input type="text" size="9" name="clock"></form>
    повторяет точное время каждого компа=) универсальнее некуда=)
     
  3. t3s

    t3s

    Регистр.:
    16 фев 2008
    Сообщения:
    719
    Симпатии:
    290
    zavu, во-первых вы немного перепутали язык, которому посвящен данный раздел )))
    во-вторых что будет если у посетителя на компе неверно настроено время?

    ТС, если нужно для чего-то простого, к примеру вывода приветствия в стиле "добрый день/вечер" - тогда действительно наверное проще всего использовать жабоскрипт

    если для чего-то более сложного, т.е. если время посетителя будет использовать ваш серверный скрипт (хз - например цена доставки в инет-магазине может зависить от часового пояса или времени суток) то лучше использовать часовые пояса (timezone) - и именно их хранить в базе, а выводить просто добавляя к серверному времени разницу для часового пояса

    возможно вам поможет вот это
    http://habrahabr.ru/blogs/php/19838/

    учтите что определение часового пояса например по GeoIP вовсе не панацея - к примеру клиент может использовать прокси
     
    yeaahhh нравится это.
  4. zavu

    zavu

    Регистр.:
    24 сен 2010
    Сообщения:
    180
    Симпатии:
    14
    сорри=) просто вопрос стоял в общем о способах, вот и пришел в голову самый простой. Тем более что вручную юзеру не нужно указывать свое время...
    А насчет таймзоны, некоторые хостеры не дают возможности корректировать серверное время почему-то... У меня такой америкосовский попался, и для обычного сайта ява-вариант - едва ли не единственная возможность установить часы.
     
  5. AleksWhite

    AleksWhite Постоялец

    Регистр.:
    5 фев 2008
    Сообщения:
    55
    Симпатии:
    10
    Данная функция ИМХО не подходит так как использует время сервера, а нам надо время у пользователя.

    Остается только два варианта:
    1. Как уже было описано, узнать время на машине пользователя через JS;
    2. Используя IP-адрес пользователя определить: его страну, согласно стране определить часовой пояс, сделать коррекцию и выдать время пользователя.

    Таким образом удоббней использовать JS+PHP. А дальше все зависит от задачи.
    Под хайдом ссылка на базу определения города и страны по IP-адресу
    http://www.geobaza.ru/ru/ - Geobaza — модуль определения города и страны по IP-адресу
     
    yeaahhh нравится это.
  6. trooll

    trooll PHP кодер

    Регистр.:
    22 дек 2008
    Сообщения:
    503
    Симпатии:
    116
    Чушь все это GEO IP, актуально только для крупных городов...

    К примеру, дома у меня везде куда бы я не заходил пишет по GEO IP Барнаул, на сам же деле Барнаул от моего места нахождения в несколько тысяч километров, ну черт с ним здесь еще ладно часовой пояс единый еще можно смериться.

    Но на работе Инет вообще через Новосибирского провайдера, как следствия везде мне говориться что я мать его коренной Новосибирец. И разница во времени получается уже целый час, так как другой часовой пояс.

    Короче Хреновы провайдеры экономисты мать их)))

    В общем GEO IP далеко не панацея в этой задачи.

    Тут нужен комплексный подход:
    1) GEO IP (минус это что пользователь может сидеть через проксю)
    2) Определения системного времени в ОС с помощью JS (это уже ближе к истине но минус в том что системные часы могут в момент получения времени идти не верно).
    3) Спросить у пользователя прямо сколько у него времени (самы правильный вариант, минус это то что человек может соврать)

    Я бы сделал так:
    1) Спросил у пользователя с какого он города, из этого узнал бы время в городе (этот пункт можно не использовать, но он самый правильный)
    2) Потом узнал бы время по GEO IP
    3) Узнал бы время с помощью JS

    Если время в трех одинаково значит все четко, это наш клиент.

    Если 1 пункт отличается от 2 и 3 пользователь пиздбалабол, минус ему в уровень доверия. Время получаем по 2 и 3 пункту так как они равны. Все попался, наш клиент.

    Если 2 отличается от 1 и 3, Х-м, чего то пользователь не в своем городе заимел IP адрес. Варианты прокси, VPN провайдер мудак-экономка :) и т.д. В общем при этом варианте пользователь может шифруется (если исключить вариант с экономным провайдером). Время получаем по 1 и 3 пункту так как они равны. Поверим на слово пользователю и будем надеется что время в ОС идет правильно.

    Если пункт 3 отличается от 1 и 2, то у пользователя сбилось время в ОС либо он балобол и провайдер у него экономка. Ну как варинт пользователь ушибленный на всю голову и живет по не местному времени или просто в командировке забыл перевести время. Берем время с 1 и 2 пункта.

    Если все три варианта различны, чего то х-ня какая то, минус в уровень доверия. Не задумываясь берем время с 3 пункта.


    Ну вот как то так. При твоем раскладе у тебя 2 варианта проверки что очень сужает плацдарм для маневров. Желательно все же делать не менее трех проверок и на основе их уже делать какие то заключения. При таком раскладе как у тебя я бы остановился все же на JS.
     
    yeaahhh нравится это.
  7. yeaahhh

    yeaahhh

    Регистр.:
    8 май 2008
    Сообщения:
    278
    Симпатии:
    11
    Просто я пишу соц. сеть.. Время хочу получать для отображения сообщений на стенах и т.п. с правильным для пользователя(гостя) временем..
    Для зарегистрированных сделал пункт, в котором они указывают свой часовой..
    А вот для незарегенных - думаю, как будет лучше..
    Спасибо вам большое за советы!
     
  8. dino

    dino

    Регистр.:
    28 май 2009
    Сообщения:
    550
    Симпатии:
    204
    А для незареганых пиши просто: "Московское время= {тут время сервака по москве}... (хотите знать Ваше время? Регистрируйтесь)" Дальше они сами разберутся... :)
     
  9. -=Xardas=-

    -=Xardas=-

    Регистр.:
    17 сен 2008
    Сообщения:
    250
    Симпатии:
    58
    это будут проблемы посетителя, аналогичный вопрос: "что будет если у пользователя монитор расширением 300х400?". Нельзя что бы из за меньшинства, большинство лишалось каких то фич. Кроме того можно например отсеять, а точнее практически свести людей с неправильным отображением времени к нулю, например проверкой даты, что бы разница между серверным временем и временем клиента была не больше 24 часов, и если разница большая то выводить пользователю серверное время.

    как вариант, корректировать временной пояс, основываясь на клиентском времени, учитываю разницу во времени как я описал выше.
     
  10. t3s

    t3s

    Регистр.:
    16 фев 2008
    Сообщения:
    719
    Симпатии:
    290
    вообще-то я тоже сторонник определения времени несколькими вариантами, и в ссылке которую предлагал ТС-у был вариант, похожий на тот что описал trool - сравниваем время по ип и на компе пользователя, и в случае если они отличаются ненавязчиво уточняем у пользователя - типа "мы не смогли определить который час в вашем городе, то ли 18-00 то ли 19-00, может подскажите?"


    растолкуйте пожалуйста свое последнее предложение - а то из него получается что trool и -=Xardas=- это один и тот же человек