복붙노트

사용자의 시간대를 감지하는 방법은 무엇입니까? [복제]

PHP

사용자의 시간대를 감지하는 방법은 무엇입니까? [복제]

현재 사용자가 IP 또는 http 헤더를 기반으로하는 시간대를 확인해야합니다.

이 문제와 관련하여 많은 답변을 얻었지만 답변을 이해할 수 없었습니다. 일부는 새로운 Date (). getTimezoneOffset () / 60 (여기에서)을 사용한다고 말합니다. 그러나 그것은 무엇을 의미합니까?

date_default_timezone_set ( "아시아 / 캘커타"); 내 (index.php) 페이지의 루트에. 그래서 이것을 위해 저는 역동적으로 타임 존을 가져 와서 아시아 / 캘커타 대신에 설정해야합니다.

해결법

  1. ==============================

    1.Matt Johnson의 답변을 코드 측면에서 요약하면 다음과 같습니다.

    Matt Johnson의 답변을 코드 측면에서 요약하면 다음과 같습니다.

    <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js">
    </script>
    <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jstimezonedetect/1.0.4/jstz.min.js">
    </script>
    <script type="text/javascript">
      $(document).ready(function(){
        var tz = jstz.determine(); // Determines the time zone of the browser client
        var timezone = tz.name(); //'Asia/Kolhata' for Indian Time.
        $.post("url-to-function-that-handles-time-zone", {tz: timezone}, function(data) {
           //Preocess the timezone in the controller function and get
           //the confirmation value here. On success, refresh the page.
         });
      });
    </script>
    
  2. ==============================

    2.브라우저의 표준 시간대 정보는 HTTP 사양의 일부가 아니므로 헤더에서 가져올 수 없습니다.

    브라우저의 표준 시간대 정보는 HTTP 사양의 일부가 아니므로 헤더에서 가져올 수 없습니다.

    위치 좌표 (예 : 휴대 기기 GPS)가있는 경우 다음 방법 중 하나를 사용하여 시간대를 찾을 수 있습니다. 그러나 IP 주소로 지리적 위치를 지정하는 것은 큰 해결책이 아닙니다. 종종 IP가 다른 표준 시간대에있는 ISP 또는 프록시 서버의 IP이기 때문입니다.

    jsTimeZoneDetect 라이브러리를 사용하는 등 시간대를 감지하는 데 사용할 수있는 몇 가지 전략이 있지만 훌륭한 출발점이지만 불완전 함으로 인해 그저 혼자만의 시간에만 의존 할 수는 없습니다. 만약 당신이 moment.js를 사용한다면, moment.tz.guess ()라고하는 순간 시간대에 같은 기능을하는 함수가 내장되어 있습니다.

    JavaScript의 getTimezoneOffset () 함수를 사용한다는 생각에는 시간대가 표시되지 않는다는 점에서 결함이 있습니다. 특정 날짜에 대해 단일 오프셋 만 사용하면됩니다. TimeZone 태그 wiki의 "TimeZone! = Offset"절을 참조하십시오.

    그러나 당신은 그것을 보면서 궁극적으로 두 가지 접근 방법 중 하나를 결정해야합니다.

    또는

    이 답변에서이 문제에 대해 자세히 논의합니다 (C # 관점에서).

  3. ==============================

    3.종속성 :

    종속성 :

    인용문 : Stanislav Khromov의 MaxMind GeoIP 및 PHP를 사용하여 방문객 현지 시각, 일출 및 일몰 시간

  4. ==============================

    4.한가지 해결책은 그들에게 묻는 것입니다! 특히 사용자를 캡처 / 등록 할 수있는 회원 시스템에서는 그 시점에서 선택권을 부여하십시오. 간단하지만 정확합니다.

    한가지 해결책은 그들에게 묻는 것입니다! 특히 사용자를 캡처 / 등록 할 수있는 회원 시스템에서는 그 시점에서 선택권을 부여하십시오. 간단하지만 정확합니다.

  5. ==============================

    5.이것은 잘 작동합니다 ...

    이것은 잘 작동합니다 ...

      echo <<<EOE
       <script type="text/javascript">
         if (navigator.cookieEnabled)
           document.cookie = "tzo="+ (- new Date().getTimezoneOffset());
       </script>
    EOE;
      if (!isset($_COOKIE['tzo'])) {
        echo <<<EOE
          <script type="text/javascript">
            if (navigator.cookieEnabled) document.reload();
            else alert("Cookies must be enabled!");
          </script>
    EOE;
        die();
      }
      $ts = new DateTime('now', new DateTimeZone('GMT'));
      $ts->add(DateInterval::createFromDateString($_COOKIE['tzo'].' minutes'));
    
  6. ==============================

    6.시간대는 HTTP 헤더에서 사용할 수 없지만 국가 (약어)는 ACCEPT_LANGUAGE 헤더에 있습니다. "en-US"(미국은 국가 코드)와 같을 것입니다. 이 정보를 JavaScript 정보와 결합하여 사용자의 시간대를 파악할 수 있습니다.

    시간대는 HTTP 헤더에서 사용할 수 없지만 국가 (약어)는 ACCEPT_LANGUAGE 헤더에 있습니다. "en-US"(미국은 국가 코드)와 같을 것입니다. 이 정보를 JavaScript 정보와 결합하여 사용자의 시간대를 파악할 수 있습니다.

    이것은 JS에서 사용하고있는 것입니다.

    function timezone() {
      var now = new Date();
      var jano = new Date(now.getFullYear(), 0, 1).getTimezoneOffset()/-60;
      var julo = new Date(now.getFullYear(), 6, 1).getTimezoneOffset()/-60;
      var tz = Math.min(jano, julo);
      if (jano != julo) tz += ((jano < julo) ? 'S' : 'W') + Math.abs(jano - julo);
      return tz;
    }
    

    이렇게하면 중앙 구역에 대해 "-6S1"과 같은 문자열이 반환됩니다 (표준 시간 오프셋은 -6 시간, DST는 여름에 활성화되고 1 시간 추가됨). 이 쿠키를 PHP에서 사용할 수 있도록 쿠키를 사용합니다. PHP는 TZ 데이터베이스에서이 영역과 국가와 일치하는 영역을 검색합니다. 여기 (미국, -6S1)에는 7 개의 일치하는 구역이 있으며, 첫 번째 구역은 "America / Chicago"입니다.

    BTW에서는 DST가 Lord Howe Island (10.5W0.5) 및 Troll Station, 남극 (0W2)과 같이 1 시간 이외의 다른 부분을 추가하는 데이터베이스에 2 개의 영역이 있습니다.

  7. from https://stackoverflow.com/questions/16525617/how-to-detect-users-timezone by cc-by-sa and MIT license