Wyznaczyć strefy czasowej Użytkownika

głosy
529

Czy istnieje jakiś standardowy sposób dla serwera WWW, aby móc określić strefę czasową użytkownika w obrębie strony internetowej?

Być może z nagłówka HTTP lub części łańcucha user-agent?

Utwórz 01/08/2008 o 01:42
źródło użytkownik
W innych językach...                            


25 odpowiedzi

głosy
302
-new Date().getTimezoneOffset()/60;

Metoda getTimezoneOffset()będzie odjąć czas GMT i zwraca liczbę minut. Więc jeśli mieszkasz w GMT-8, zwróci 480.

Aby umieścić to w godzinach, należy podzielić przez 60. Zauważ też, że znak jest przeciwieństwem tego, co trzeba - to obliczenie GMT offset ze swojej strefy czasowej, nie strefa czasowa GMT offset. Aby rozwiązać ten problem, wystarczy pomnożyć przez -1.

Należy również pamiętać, że w3school mówi:

Zwrócona wartość nie jest stała, ponieważ z praktyki stosowania czasu letniego.

Odpowiedział 27/11/2009 o 18:52
źródło użytkownik

głosy
174

Najbardziej popularne (== standard?) Sposób ustalania strefę czasową widziałem wokół jest po prostu pytając samych użytkowników. Jeśli witryna wymaga abonamentu, to może być zapisane w danych profilowych użytkowników. Dla użytkowników Anon, terminy mogą być wyświetlane jako UTC lub GMT lub coś takiego.

Nie staram się być przemądrzały typ. To tylko niektóre problemy, które czasami mają drobniejsze rozwiązań poza jakimkolwiek kontekście programowania.

Odpowiedział 03/08/2008 o 20:30
źródło użytkownik

głosy
77

Brak nagłówków HTTP, które zgłosi strefę czasową klientów tak daleko, choć sugerowano, aby uwzględnić go w specyfikacji HTTP.

Jeśli to było do mnie, to pewnie próbować sprowadzić strefę czasową używając stronie klienta JavaScript, a następnie przesłać go do serwera przy użyciu Ajax czy coś.

Odpowiedział 01/08/2008 o 13:19
źródło użytkownik

głosy
47

Javascript jest najprostszym sposobem, aby uzyskać czasu lokalnego klienta. Proponuję stosując XMLHttpRequestodesłać czasu lokalnego, a jeśli to się nie powiedzie, spaść z powrotem do strefy czasowej wykryte na podstawie ich adresu IP.

Jeśli chodzi o geolokalizacji, Użyłem MaxMind GeoIP nad kilkoma projektami i działa dobrze, choć nie jestem pewien, czy stanowią one dane strefy czasowej. Jest to usługa płacisz i zapewniają comiesięcznych aktualizacji bazy danych. Zapewniają one owijarki w kilku językach internetowych.

Odpowiedział 01/08/2008 o 16:11
źródło użytkownik

głosy
39

Tutaj jest solidnym rozwiązaniem JavaScript, żeby ustalić strefę czasową przeglądarka jest w.

>>> var timezone = jstz.determine();
>>> timezone.name(); 
"Europe/London"

https://bitbucket.org/pellepim/jstimezonedetect

Odpowiedział 06/08/2012 o 22:22
źródło użytkownik

głosy
34

Oto bardziej kompletny sposób.

  1. Pierwsze okno czasowe przesunięcie dla użytkownika
  2. Przetestować kilka dni na DLS granic w celu ustalenia, czy są one w strefie, która używa DLS.

Poniżej wyjątkiem:

function TimezoneDetect(){
    var dtDate = new Date('1/1/' + (new Date()).getUTCFullYear());
    var intOffset = 10000; //set initial offset high so it is adjusted on the first attempt
    var intMonth;
    var intHoursUtc;
    var intHours;
    var intDaysMultiplyBy;

    //go through each month to find the lowest offset to account for DST
    for (intMonth=0;intMonth < 12;intMonth++){
        //go to the next month
        dtDate.setUTCMonth(dtDate.getUTCMonth() + 1);

        //To ignore daylight saving time look for the lowest offset.
        //Since, during DST, the clock moves forward, it'll be a bigger number.
        if (intOffset > (dtDate.getTimezoneOffset() * (-1))){
            intOffset = (dtDate.getTimezoneOffset() * (-1));
        }
    }

    return intOffset;
}

Pierwsze TZ i DST z JS (poprzez Way Back Machine)

Odpowiedział 30/03/2011 o 21:48
źródło użytkownik

głosy
26

Stosując podejście Unkwntech za napisałem funkcję przy użyciu jQuery i PHP. Jest to sprawdzony i działa!

Na stronie PHP gdzie jesteś chcą mieć strefę czasową jako zmienną, mają ten fragment kodu gdzieś w górnej części strony:

<?php    
    session_start();
    $timezone = $_SESSION['time'];
?>

To odczytu zmiennej sesji „Time”, którego jesteśmy teraz zamiar stworzyć.

Na tej samej stronie, w, trzeba przede wszystkim zawierać jQuery:

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>

Również w, poniżej jQuery, wklej to:

<script type="text/javascript">
    $(document).ready(function() {
        if("<?php echo $timezone; ?>".length==0){
            var visitortime = new Date();
            var visitortimezone = "GMT " + -visitortime.getTimezoneOffset()/60;
            $.ajax({
                type: "GET",
                url: "http://domain.com/timezone.php",
                data: 'time='+ visitortimezone,
                success: function(){
                    location.reload();
                }
            });
        }
    });
</script>

Państwo może, ale nie zauważyłem, ale trzeba zmienić adres URL do rzeczywistej domeny.

Ostatnia rzecz. Jesteś prawdopodobnie zastanawiasz się, co timezone.php cholery jest. Cóż, to jest to po prostu: (utwórz nowy plik o nazwie timezone.php i wskazać go z powyższego URL)

<?php
    session_start();
    $_SESSION['time'] = $_GET['time'];
?>

Jeśli to działa poprawnie, to najpierw załadować stronę, należy wykonać JavaScript i odśwież stronę. Wtedy będziesz mógł odczytać zmiennej czasowej dolarów i używać go do przyjemności! Zwraca bieżącą strefę UTC / GMT przesunięcie czasowe (GMT-7) lub niezależnie od strefy czasowej się znajdujesz.

Odpowiedział 09/04/2011 o 20:16
źródło użytkownik

głosy
18

Po pierwsze, zrozumieć, że wykrywanie strefa czasowa w JavaScript jest niedoskonała. Można uzyskać lokalną strefę czasową offsetu dla konkretnej daty i godziny, stosując getTimezoneOffsetna przykład z Dateobiektu, ale to nie to samo, co pełny IANA strefy czasowej podobnego America/Los_Angeles.

Istnieje kilka opcji, które mogą pracować mimo:

  • Większość współczesnych przeglądarek obsługuje stref czasowych IANA w ich realizacji API ECMAScript internacjonalizacji , więc można to zrobić:

    const tzid = Intl.DateTimeFormat().resolvedOptions().timeZone;
    

    Wynikiem jest łańcuch zawierający ustawienia stref czasowych IANA komputera, na którym uruchomiony jest kod.

    Obsługiwane środowiska są wymienione w tabeli kompatybilności Intl . Rozwiń DateTimeFormatsekcję, i spojrzeć na funkcję o nazwie resolvedOptions().timeZone defaults to the host environment.

  • Jeśli trzeba wspierać szerszy zestaw środowiskach, takich jak starszych przeglądarek internetowych, można korzystać z biblioteki dokonać zgaduje w strefie czasowej. Działają one najpierw spróbować IntlAPI, jeśli jest ona dostępna, a gdy to nie jest dostępne, przesłuchać getTimezoneOffsetfunkcję Dateobiektu, dla kilku różnych punktach w czasie, korzystając z wyników, aby wybrać odpowiednią strefę czasową z wewnętrznego zestawu danych.

    Zarówno jsTimezoneDetect i chwila czasowa mieć tej funkcji.

    // using jsTimeZoneDetect
    var tzid = jstz.determine().name();
    
    // using moment-timezone
    var tzid = moment.tz.guess();
    

    W obu przypadkach wynik może być traktowane jedynie jako przypuszczenie. Przypuszczenie może być prawidłowa w wielu przypadkach, ale nie wszystkie z nich.

    Dodatkowo biblioteki te muszą być okresowo aktualizowane, aby przeciwdziałać fakt, że wiele starszych implementacje JavaScript są świadomi tylko z bieżącym letniego regułę czasu dla lokalnej strefy czasowej. Więcej szczegółów na ten temat tutaj.

Ostatecznie lepszym podejściem jest faktycznie poprosić użytkownika o swojej strefie czasowej. Zapewniamy ustawienia, które mogą zmienić. Można skorzystać z jednej z powyższych opcji, aby wybrać domyślne ustawienie, ale nie sprawiają, że niemożliwe, aby odstąpić od tego w swojej aplikacji.

Jest też zupełnie inne podejście nie opierając się na ustawienie czasu strefa komputerze użytkownika w ogóle. Zamiast tego, jeśli można zbierać współrzędne geograficzne, można rozwiązać te do strefy czasowej przy użyciu jednej z następujących metod . Działa to dobrze na urządzeniach mobilnych.

Odpowiedział 25/03/2014 o 04:47
źródło użytkownik

głosy
18

Aby przesłać strefy czasowej jako nagłówka HTTP z żądań AJAX z jQuery

$.ajaxSetup({
    beforeSend: function(xhr, settings) {
        xhr.setRequestHeader("X-TZ-Offset", -new Date().getTimezoneOffset()/60);
    }
});

Można też zrobić coś podobnego, aby uzyskać rzeczywistą nazwę strefy czasowej, korzystając moment.tz.guess();z http://momentjs.com/timezone/docs/#/using-timezones/guessing-user-timezone/

Odpowiedział 13/09/2012 o 03:05
źródło użytkownik

głosy
18

I jeszcze nie widziałem szczegółową odpowiedź tutaj, że dostaje strefę czasową. Nie ma potrzeby Geokodując przez adres IP lub użyć PHP (lol) lub nieprawidłowo domyślić z offsetem.

Po pierwsze strefy czasowej nie jest po prostu przesunięcie od GMT. Jest to obszar ziemi w których reguły czasowe są ustalane przez lokalne standardy. Niektóre kraje mają czasu letniego, a włączy się DST w różnych czasach. Jest to zwykle ważne, aby uzyskać rzeczywistą strefy, a nie tylko prąd przesunięcia.

Jeśli zamierzasz przechowywać strefę czasową, na przykład w preferencjach chcesz strefę i nie tylko przesunięcie. Do konwersji w czasie rzeczywistym to nie będzie miało znaczenia wiele.

Teraz, aby dostać strefę czasową z javascript można użyć to:

>> new Date().toTimeString();
"15:46:04 GMT+1200 (New Zealand Standard Time)"
//Use some regular expression to extract the time.

Jednak uważam, że łatwiej po prostu użyć tego solidną wtyczkę która zwraca Olsen sformatowany strefę czasową:

https://github.com/scottwater/jquery.detect_timezone

Odpowiedział 30/08/2012 o 06:08
źródło użytkownik

głosy
16

Proste, wystarczy użyć JavaScriptu getTimezoneOffsetfunkcję tak:

-new Date().getTimezoneOffset()/60;
Odpowiedział 27/05/2012 o 18:25
źródło użytkownik

głosy
16

Z funkcją data PHP dostaniesz czas dat serwera, na którym strona się znajduje. Jedynym sposobem, aby uzyskać czas obsługi jest użycie JavaScript.

Ale proponuję, jeśli witryna wymagałoby następnie rejestracja najlepszym sposobem jest poproszenie użytkownika podczas rejestracji jako obowiązkowego pola. Można wymienić różne strefy czasowe w stronie rejestru i zapisać, że w bazie danych. Po tym, gdy użytkownik logowanie do serwisu wtedy można ustawić domyślną strefę czasową dla tej sesji, jak na wybranej strefy czasowej użytkownika. Można ustawić żadnej konkretnej strefy czasowej przy użyciu funkcji PHP date_default_timezone_set. Ten ustawić określoną strefę czasową dla użytkowników.

Zasadniczo strefy czasowej użytkowników będzie idzie po stronie klienta, więc musimy użyć JavaScript do tego.

Poniżej znajduje się skrypt, aby uzyskać strefę czasową użytkowników za pomocą PHP i JavaScript.

<?php
#http://www.php.net/manual/en/timezones.php List of Time Zones
function showclienttime()
{
  if(!isset($_COOKIE['GMT_bias']))
  {
    ?>
    <script type="text/javascript">
    var Cookies = {};
    Cookies.create = function (name, value, days) {
      if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        var expires = "; expires=" + date.toGMTString();
      } else {
        var expires = "";
      }
      document.cookie = name + "=" + value + expires + "; path=/";
      this[name] = value;
    }

    var now = new Date();
    Cookies.create("GMT_bias",now.getTimezoneOffset(),1);
    window.location = "<?php echo $_SERVER['PHP_SELF'];?>";
    </script>
    <?php
  } else {
    $fct_clientbias = $_COOKIE['GMT_bias'];
  }

  $fct_servertimedata = gettimeofday();
  $fct_servertime = $fct_servertimedata['sec'];
  $fct_serverbias = $fct_servertimedata['minuteswest'];
  $fct_totalbias = $fct_serverbias – $fct_clientbias;
  $fct_totalbias = $fct_totalbias * 60;
  $fct_clienttimestamp = $fct_servertime + $fct_totalbias;
  $fct_time = time();
  $fct_year = strftime("%Y", $fct_clienttimestamp);
  $fct_month = strftime("%B", $fct_clienttimestamp);
  $fct_day = strftime("%d", $fct_clienttimestamp);
  $fct_hour = strftime("%I", $fct_clienttimestamp);
  $fct_minute = strftime("%M", $fct_clienttimestamp);
  $fct_second = strftime("%S", $fct_clienttimestamp);
  $fct_am_pm = strftime("%p", $fct_clienttimestamp);
  echo $fct_day.", ".$fct_month." ".$fct_year." ( ".$fct_hour.":".$fct_minute.":".$fct_second." ".$fct_am_pm." )";
}

showclienttime();
?>

Ale jak za mojego punktu widzenia, to lepiej zwrócić się do użytkowników, jeśli rejestracja jest obowiązkowa w projekcie.

Odpowiedział 16/09/2010 o 06:59
źródło użytkownik

głosy
16

Ktoś wie o wszelkich usług, które będą pasować IP do położenia geograficznego

Cóż, na szczęście dla ciebie, że odpowiedź można znaleźć na naszej stronie internetowej własny stackoverflow: Jak uzyskać Kraj według określonego adresu IP?

spoiler: http://www.hostip.info/use.html

Odpowiedział 04/08/2008 o 12:11
źródło użytkownik

głosy
15

javascript:

function maketimus(timestampz)
{
    var linktime = new Date(timestampz * 1000);
    var linkday = linktime.getDate();
    var freakingmonths=new Array();

    freakingmonths[0]="jan";
    freakingmonths[1]="feb";
    freakingmonths[2]="mar";
    freakingmonths[3]="apr";
    freakingmonths[4]="may";
    freakingmonths[5]="jun";
    freakingmonths[6]="jul";
    freakingmonths[7]="aug";
    freakingmonths[8]="sep";
    freakingmonths[9]="oct";
    freakingmonths[10]="nov";
    freakingmonths[11]="dec";

    var linkmonthnum = linktime.getMonth();
    var linkmonth = freakingmonths[linkmonthnum];
    var linkyear = linktime.getFullYear();
    var linkhour = linktime.getHours();
    var linkminute = linktime.getMinutes();

    if (linkminute < 10)
    {
        linkminute = "0" + linkminute;
    }

    var fomratedtime = linkday + linkmonth + linkyear + " " + linkhour + ":" + linkminute + "h";
    return fomratedtime;
}    

wystarczy podać swój czas w formacie UNIX timestamp tej funkcji javascript już wie strefy czasowej użytkownika.

lubię to:

php:

echo '<script type="text/javascript">
var eltimio = maketimus('.$unix_timestamp_ofshiz.');
document.write(eltimio);
</script><noscript>pls enable javascript</noscript>';

to zawsze pokaże razy poprawnie na podstawie strefy czasowej osoba postawiła na swoim zegarze komputera, nie ma potrzeby, aby poprosić o nic nikomu i zapisać go w miejscach, dzięki Bogu!

Odpowiedział 28/08/2011 o 00:00
źródło użytkownik

głosy
14

Nie należy używać adresu IP, aby ostatecznie ustalić lokalizację (i strefę czasową hense) - to dlatego, że z NAT, serwery proxy (coraz bardziej popularne) i VPN, adresy IP nie muszą realistycznie odzwierciedlać użytkownika rzeczywistą lokalizację, ale miejsce, w którym serwery wdrażające te protokoły zamieszkania.

Podobny do tego, jak kody okolicy nie jest już przydatny do lokalizowania użytkownika telefonu są, biorąc pod uwagę popularność Przenoszenie numeru.

IP oraz inne techniki przedstawione powyżej są przydatne do sugerując domyślne , które użytkownik może dostosować / poprawne.

Odpowiedział 02/01/2013 o 19:05
źródło użytkownik

głosy
14

Magia wszystko wydaje się być w

visitortime.getTimezoneOffset()

To jest fajne, nie wiedziałem o tym. To działa w IE, itp? Stamtąd powinieneś być w stanie korzystać z JS do Ajaksu, ustawianie ciasteczek, cokolwiek. pewnie bym pójść drogą pliku za siebie.

Musisz pozwolić użytkownikowi na zmianę go jednak. Staraliśmy się używać geolokalizacji (poprzez MaxMind), aby zrobić to jakiś czas temu, i to było złe dość często - na tyle, aby to nie warto tego robić, więc po prostu pozwolić użytkownikowi ustawić go w swoim profilu, i pokazać zawiadomienie skierowane do użytkowników, którzy nie ustawić ich kompetencji jeszcze.

Odpowiedział 03/08/2008 o 21:40
źródło użytkownik

głosy
11

Prostym sposobem na to jest za pomocą:

new Date().getTimezoneOffset();
Odpowiedział 01/12/2011 o 12:08
źródło użytkownik

głosy
11

Jeśli zdarzy ci się być za pomocą OpenID do uwierzytelniania, prosta rejestracja Extension rozwiązałoby problem dla uwierzytelnionych użytkowników (musisz przekonwertować z tz do numeryczna).

Innym rozwiązaniem byłoby wywnioskować strefę czasową z preferencjami kraju agenta użytkownika. Jest to nieco surowy metoda (nie zadziała na en-US), ale robi dobre przybliżenie.

Odpowiedział 30/08/2008 o 10:29
źródło użytkownik

głosy
10

Oto artykuł (z kodem źródłowym), który wyjaśnia, jak ustalić i wykorzystać miejscowe czas w (VB.NET, C #) aplikacji ASP.NET:

W samą porę

W skrócie, opisane podejście opiera się na JavaScript getTimezoneOffsetfunkcji, która zwraca wartość, która jest zapisana w pliku cookie sesji i wykorzystywane przez kod z opóźnieniem do regulacji wartości czasu między GMT i czasem lokalnym. Dobrą rzeczą jest to, że użytkownik nie musi określić strefę czasową (kod robi to automatycznie). Jest bardziej zaangażowani (to dlaczego link do artykułu), ale pod warunkiem, kod sprawia, że naprawdę łatwe w użyciu. Podejrzewam, że można przekonwertować logikę PHP i innych języków (tak długo, jak zrozumieć ASP.NET).

Odpowiedział 25/05/2010 o 01:11
źródło użytkownik

głosy
8

Proste z JSi PHP:

Nawet jeśli użytkownik może bałagan z jego wewnętrznego zegara i / lub strefy czasowej, najlepszym sposobem znalazłem tak daleko, aby uzyskać przesunięcie pozostaje new Date().getTimezoneOffset();. Jego nieinwazyjne, nie daje bóle głowy i eliminuje konieczność powoływania się na osoby trzecie.

Że mam tabelę users, która zawiera pole date_created int(13), do przechowywania znaczników czasu UNIX;

Zakładając, że klient creates a new account, dane są odbierane przez posti muszę z uniksowego znacznika czasu klienta, a nie serwera.insert/updatedate_created column

Ponieważ timezoneOffset jest potrzebna w momencie wkładania / aktualizacji, jest on przekazywany jako dodatkowy element $ _POST, gdy klient wysyła formularz, eliminując konieczność magazynowania go w sesjach i / lub ciasteczka, a nie dodatkowy serwer uderza albo.

var off = (-new Date().getTimezoneOffset()/60).toString();//note the '-' in front which makes it return positive for negative offsets and negative for positive offsets
var tzo = off == '0' ? 'GMT' : off.indexOf('-') > -1 ? 'GMT'+off : 'GMT+'+off;

Powiedzieć serwer odbiera tzojako $_POST['tzo'];

$ts = new DateTime('now', new DateTimeZone($_POST['tzo']);
$user_time = $ts->format("F j, Y, g:i a");//will return the users current time in readable format, regardless of whether date_default_timezone() is set or not.
$user_timestamp = strtotime($user_time);

Wstaw / aktualizację date_created=$user_timestamp.

Podczas pobierania DATE_CREATED, można konwertować znacznik czasu tak:

$date_created = //get from db
$created = date("F j, Y, g:i a",$date_created);//return it to the user or whatever

Teraz, ten przykład może dopasować swoich potrzeb, jeśli chodzi o wstawienie firstznacznika czasu ... Jeśli chodzi o dodatkowy datownik, lub stole, u może rozważyć wstawienie wartości TZO w tabeli użytkowników do wykorzystania w przyszłości, lub ustawienie go jako sesji lub jako cookie.

PS Ale co jeśli użytkownik podróżuje i przełączniki strefy czasowe. Loguje się na GMT + 4, przemieszcza się szybko do GMT-1 i bali się ponownie. Ostatnie logowanie będzie w przyszłości.

Myślę ... uważamy za dużo.

Odpowiedział 15/09/2014 o 02:19
źródło użytkownik

głosy
7

Spróbuj tego kodu php

<?php  
$ip = $_SERVER['REMOTE_ADDR'];
$json = file_get_contents("http://api.easyjquery.com/ips/?ip=".$ip."&full=true");
$json = json_decode($json,true);
$timezone = $json['LocalTimeZone'];
?>
Odpowiedział 30/07/2012 o 09:08
źródło użytkownik

głosy
7

Oto jak to zrobić. Spowoduje to ustawienie domyślne PHP czasową do lokalnej strefy czasowej użytkownika. Wystarczy wkleić następujący na szczycie wszystkich stron

<?php
session_start();

if(!isset($_SESSION['timezone']))
{
    if(!isset($_REQUEST['offset']))
    {
    ?>
        <script>
        var d = new Date()
        var offset= -d.getTimezoneOffset()/60;
        location.href = "<?php echo $_SERVER['PHP_SELF']; ?>?offset="+offset;
        </script>
        <?php   
    }
    else
    {
        $zonelist = array('Kwajalein' => -12.00, 'Pacific/Midway' => -11.00, 'Pacific/Honolulu' => -10.00, 'America/Anchorage' => -9.00, 'America/Los_Angeles' => -8.00, 'America/Denver' => -7.00, 'America/Tegucigalpa' => -6.00, 'America/New_York' => -5.00, 'America/Caracas' => -4.30, 'America/Halifax' => -4.00, 'America/St_Johns' => -3.30, 'America/Argentina/Buenos_Aires' => -3.00, 'America/Sao_Paulo' => -3.00, 'Atlantic/South_Georgia' => -2.00, 'Atlantic/Azores' => -1.00, 'Europe/Dublin' => 0, 'Europe/Belgrade' => 1.00, 'Europe/Minsk' => 2.00, 'Asia/Kuwait' => 3.00, 'Asia/Tehran' => 3.30, 'Asia/Muscat' => 4.00, 'Asia/Yekaterinburg' => 5.00, 'Asia/Kolkata' => 5.30, 'Asia/Katmandu' => 5.45, 'Asia/Dhaka' => 6.00, 'Asia/Rangoon' => 6.30, 'Asia/Krasnoyarsk' => 7.00, 'Asia/Brunei' => 8.00, 'Asia/Seoul' => 9.00, 'Australia/Darwin' => 9.30, 'Australia/Canberra' => 10.00, 'Asia/Magadan' => 11.00, 'Pacific/Fiji' => 12.00, 'Pacific/Tongatapu' => 13.00);
        $index = array_keys($zonelist, $_REQUEST['offset']);
        $_SESSION['timezone'] = $index[0];
    }
}

date_default_timezone_set($_SESSION['timezone']);

//rest of your code goes here
?>
Odpowiedział 28/01/2012 o 09:21
źródło użytkownik

głosy
6

Jedną z możliwych opcji jest użycie Datepola nagłówka, który jest zdefiniowany w RFC 7231 i ma obejmować strefę czasową. Oczywiście, nie ma gwarancji, że wartość jest naprawdę stref czasowych klienta, ale może to być wygodny punkt wyjścia.

Odpowiedział 09/09/2014 o 00:25
źródło użytkownik

głosy
5

Pierwsze prawidłową nazwę strefy czasowej Database TZ w PHP jest procesem dwuetapowym:

1) z JavaScript, uzyskać przesunięcie strefy czasowej w minutach przez getTimezoneOffset. Spowoduje to przesunięcie będzie pozytywny, jeśli lokalna strefa czasowa jest za UTC i negatywny, jeśli jest to przyszłość. Więc trzeba dodać przeciwny znak do offsetu.

var timezone_offset_minutes = new Date().getTimezoneOffset();
timezone_offset_minutes = timezone_offset_minutes == 0 ? 0 : -timezone_offset_minutes;

Przekazać to przesunięcie do PHP.

2) W PHP przekonwertować to przesunięcie do prawidłowej nazwy stref czasowych z timezone_name_from_abbr funkcji.

// Just an example.
$timezone_offset_minutes = -360;  // $_GET['timezone_offset_minutes']

// Convert minutes to seconds
$timezone_name = timezone_name_from_abbr("", $timezone_offset_minutes*60, false);

// America/Chicago
echo $timezone_name;

Pisałem blogu na nim: http://usefulangle.com/post/31/detect-user-browser-timezone-name-in-php Zawiera również demo.

Odpowiedział 10/01/2017 o 11:56
źródło użytkownik

głosy
5

można to zrobić na kliencie z chwila strefy czasowej i wysłać wartość na serwerze; Próbkę zastosowanie:

> moment.tz.guess()
"America/Asuncion"
Odpowiedział 13/09/2016 o 06:19
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more