Frage

Gibt es eine Standardmethode für einen Webserver, um die Zeitzone eines Benutzers innerhalb einer Webseite zu bestimmen?

Möglicherweise aus einem HTTP-Header oder einem Teil davon user-agent Schnur?

Keine korrekte Lösung

Andere Tipps

-new Date().getTimezoneOffset()/60;

Die Methode getTimezoneOffset() subtrahiert Ihre Zeit von GMT und gibt die Anzahl der Minuten zurück.Wenn Sie also in GMT-8 leben, wird 480 zurückgegeben.

Um dies in Stunden umzurechnen, dividieren Sie durch 60.Beachten Sie außerdem, dass das Vorzeichen das Gegenteil von dem ist, was Sie benötigen – es berechnet den GMT-Offset von Ihrer Zeitzone, nicht den Offset Ihrer Zeitzone von GMT.Um dies zu beheben, multiplizieren Sie einfach mit -1.

Beachten Sie das auch w3school sagt:

Der zurückgegebene Wert ist aufgrund der Praxis, Tagesrettungszeit zu nutzen, keine Konstante.

Die beliebteste (==Standard?) Methode zur Bestimmung der Zeitzone, die ich gesehen habe, ist einfach fragen Sie die Benutzer selbst. Wenn für Ihre Website ein Abonnement erforderlich ist, kann dies in den Profildaten der Benutzer gespeichert werden.Für anonyme Benutzer könnten die Daten als UTC oder GMT oder ähnlich angezeigt werden.

Ich versuche nicht, ein Schlaumeier zu sein.Es ist nur so, dass es für einige Probleme manchmal feinere Lösungen gibt, die außerhalb des Programmierkontexts liegen.

Bisher gibt es keine HTTP-Header, die die Zeitzone des Clients melden, obwohl vorgeschlagen wurde, diese in die HTTP-Spezifikation aufzunehmen.

Wenn ich es wäre, würde ich wahrscheinlich versuchen, die Zeitzone mit clientseitigem JavaScript abzurufen und sie dann mit Ajax oder etwas anderem an den Server zu senden.

JavaScript ist der einfachste Weg, die Ortszeit des Clients abzurufen.Ich würde vorschlagen, eine zu verwenden XMLHttpRequest um die Ortszeit zurückzusenden, und falls dies fehlschlägt, auf die anhand ihrer IP-Adresse erkannte Zeitzone zurückzugreifen.

Was die Geolokalisierung betrifft, habe ich verwendet MaxMind GeoIP bei mehreren Projekten und es funktioniert gut, obwohl ich nicht sicher bin, ob sie Zeitzonendaten bereitstellen.Es handelt sich um einen kostenpflichtigen Service, der Ihre Datenbank monatlich aktualisiert.Sie bieten Wrapper in mehreren Websprachen.

Hier ist eine robuste JavaScript-Lösung zur Bestimmung der Zeitzone, in der sich der Browser befindet.

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

https://bitbucket.org/pellepim/jstimezonedetect

Hier ist ein vollständigerer Weg.

  1. Rufen Sie den Zeitzonenversatz für den Benutzer ab
  2. Testen Sie einige Tage anhand der Sommerzeitgrenzen, um festzustellen, ob sie in einer Zone liegen, in der die Sommerzeit gilt.

Nachfolgend ein Auszug:

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;
}

TZ und DST von JS erhalten (über Way Back Machine)

Bedenken Sie zunächst, dass die Zeitzonenerkennung in JavaScript unvollständig ist.Sie können die lokale bekommen Zeitzonenversatz für ein bestimmtes Datum und eine bestimmte Uhrzeit verwenden getTimezoneOffset auf einer Instanz der Date Objekt, aber das ist nicht ganz dasselbe wie ein vollständiges Objekt IANA-Zeitzone wie America/Los_Angeles.

Es gibt jedoch einige Optionen, die funktionieren können:

  • Die meisten modernen Browser unterstützen IANA-Zeitzonen bei ihrer Implementierung ECMAScript-Internationalisierungs-API, damit Sie Folgendes tun können:

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

    Das Ergebnis ist eine Zeichenfolge, die die IANA-Zeitzoneneinstellung des Computers enthält, auf dem der Code ausgeführt wird.

    Unterstützte Umgebungen werden aufgelistet in der Intl-Kompatibilitätstabelle.Erweitere das DateTimeFormat Abschnitt und schauen Sie sich die genannte Funktion an resolvedOptions().timeZone defaults to the host environment.

    • Einige Bibliotheken, wie z Luxon Verwenden Sie diese API, um die Zeitzone durch Funktionen wie zu bestimmen luxon.Settings.defaultZoneName.
  • Wenn Sie eine größere Anzahl von Umgebungen unterstützen müssen, z. B. ältere Webbrowser, können Sie eine Bibliothek verwenden, um eine zu erstellen begründete Vermutung in der Zeitzone.Sie funktionieren, indem sie zuerst das ausprobieren Intl API, wenn sie verfügbar ist, und wenn sie nicht verfügbar ist, fragen sie die ab getTimezoneOffset Funktion der Date Objekt für mehrere verschiedene Zeitpunkte zu erstellen und anhand der Ergebnisse eine geeignete Zeitzone aus einem internen Datensatz auszuwählen.

    Beide jsTimezoneDetect Und Moment-Zeitzone über diese Funktionalität verfügen.

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

    In beiden Fällen kann das Ergebnis nur als Vermutung betrachtet werden.Die Vermutung mag in vielen Fällen richtig sein, aber nicht in allen.

    Darüber hinaus müssen diese Bibliotheken regelmäßig aktualisiert werden, um der Tatsache entgegenzuwirken, dass viele ältere JavaScript-Implementierungen nur das kennen aktuell Sommerzeitregel für ihre lokale Zeitzone. Mehr Details dazu hier.

Letztendlich ist es ein besserer Ansatz, den Benutzer tatsächlich nach seiner Zeitzone zu fragen.Geben Sie eine Einstellung an, die geändert werden kann.Sie können eine der oben genannten Optionen verwenden, um eine auszuwählen Standard Legen Sie die Einstellung fest, aber machen Sie es nicht unmöglich, in Ihrer App davon abzuweichen.

Es gibt auch den völlig anderen Ansatz von nicht sich überhaupt auf die Zeitzoneneinstellung des Computers des Benutzers verlassen.Wenn Sie stattdessen Breiten- und Längenkoordinaten erfassen können, können Sie diese mithilfe von in eine Zeitzone auflösen eine dieser Methoden.Dies funktioniert gut auf mobilen Geräten.

Mit dem Ansatz von Unkwntech habe ich eine Funktion mit jQuery und PHP geschrieben.Dies ist getestet und funktioniert!

Platzieren Sie auf der PHP-Seite, auf der Sie die Zeitzone als Variable haben möchten, diesen Codeausschnitt irgendwo oben auf der Seite:

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

Dadurch wird die Sitzungsvariable „time“ gelesen, die wir jetzt erstellen werden.

Auf derselben Seite müssen Sie im <head> zunächst jQuery einbinden:

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

Fügen Sie außerdem im <head> unterhalb der jQuery Folgendes ein:

<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://example.org/timezone.php",
                data: 'time='+ visitortimezone,
                success: function(){
                    location.reload();
                }
            });
        }
    });
</script>

Sie haben es vielleicht bemerkt oder auch nicht, aber Sie müssen die URL in Ihre tatsächliche Domain ändern.

Eine letzte Sache.Sie fragen sich wahrscheinlich, was zum Teufel timezone.php ist.Nun ja, es ist einfach so:(Erstellen Sie eine neue Datei mit dem Namen timezone.php und verweisen Sie mit der oben genannten URL darauf)

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

Wenn dies ordnungsgemäß funktioniert, wird zunächst die Seite geladen, das JavaScript ausgeführt und die Seite erneut geladen.Anschließend können Sie die Variable $timezone lesen und nach Belieben verwenden!Es gibt den aktuellen UTC/GMT-Zeitzonenversatz (GMT -7) oder die Zeitzone zurück, in der Sie sich befinden.

Ich habe hier noch keine detaillierte Antwort gesehen, die die Zeitzone angibt.Sie sollten nicht nach IP-Adresse geokodieren oder PHP (lol) verwenden oder einen Offset falsch erraten müssen.

Erstens ist eine Zeitzone nicht nur ein Offset von GMT.Es handelt sich um ein Gebiet, in dem die Zeitregeln durch lokale Standards festgelegt werden.Einige Länder haben Sommerzeit und schalten die Sommerzeit zu unterschiedlichen Zeiten ein.Normalerweise ist es wichtig, die tatsächliche Zone zu ermitteln, nicht nur den aktuellen Offset.

Wenn Sie diese Zeitzone speichern möchten, beispielsweise in den Benutzereinstellungen, möchten Sie die Zone und nicht nur den Offset.Für Echtzeitkonvertierungen spielt es keine große Rolle.

Um nun die Zeitzone mit Javascript abzurufen, können Sie Folgendes verwenden:

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

Allerdings fand ich es einfacher, einfach dieses robuste Plugin zu verwenden, das die Olsen-formatierte Zeitzone zurückgibt:

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

Um den Zeitzonen-Offset als HTTP-Header bei AJAX-Anfragen zu übermitteln jQuery

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

Sie können auch etwas Ähnliches tun, um den tatsächlichen Zeitzonennamen zu erhalten, indem Sie verwenden moment.tz.guess(); aus http://momentjs.com/timezone/docs/#/using-timezones/guessing-user-timezone/

Mit dem PHP date Mit dieser Funktion erhalten Sie das Datum und die Uhrzeit des Servers, auf dem sich die Site befindet.Die einzige Möglichkeit, dem Benutzer Zeit zu verschaffen, ist die Verwendung von JavaScript.

Ich empfehle Ihnen jedoch, dies zu tun: Wenn auf Ihrer Website eine Registrierung erforderlich ist, ist es am besten, den Benutzer zu fragen, ob die Registrierung ein Pflichtfeld sein soll.Sie können auf der Registerseite verschiedene Zeitzonen auflisten und diese in der Datenbank speichern.Wenn sich der Benutzer danach bei der Site anmeldet, können Sie die Standardzeitzone für diese Sitzung entsprechend der vom Benutzer ausgewählten Zeitzone festlegen.

Mit der PHP-Funktion können Sie eine beliebige Zeitzone festlegen date_default_timezone_set.Dadurch wird die angegebene Zeitzone für Benutzer festgelegt.

Grundsätzlich wird die Zeitzone des Benutzers auf die Clientseite übertragen, daher müssen wir hierfür JavaScript verwenden.

Unten finden Sie das Skript zum Abrufen der Zeitzone der Benutzer mithilfe von PHP und 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();
?>

Meiner Meinung nach ist es jedoch besser, die Benutzer zu fragen, ob in Ihrem Projekt eine Registrierung erforderlich ist.

Ganz einfach, verwenden Sie einfach JavaScript getTimezoneOffset funktionieren so:

-new Date().getTimezoneOffset()/60;

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;
}

Geben Sie dieser Funktion einfach Ihre Zeiten im Unix-Zeitstempelformat an;JavaScript kennt bereits die Zeitzone des Benutzers.

So was:

PHP:

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

Dadurch werden die Zeiten immer korrekt angezeigt, basierend auf der Zeitzone, die die Person auf ihrer Computeruhr eingestellt hat.Es ist nicht nötig, irgendjemanden um etwas zu bitten und es an einem bestimmten Ort aufzubewahren, Gott sei Dank!

Die Magie scheint alles da zu sein

visitortime.getTimezoneOffset()

Das ist cool, das wusste ich nicht.Funktioniert es im Internet Explorer usw.?Von dort aus sollten Sie in der Lage sein, JavaScript für Ajax zu verwenden, Cookies zu setzen, was auch immer.Ich würde wahrscheinlich selbst den Cookie-Weg gehen.

Sie müssen dem Benutzer jedoch erlauben, es zu ändern.Wir haben vor einiger Zeit versucht, hierfür Geolokalisierung (über maxmind) zu verwenden, und es war ziemlich oft falsch – genug, um es nicht lohnenswert zu machen, also ließen wir den Benutzer es einfach in seinem Profil festlegen und zeigten den Benutzern, die dies tun, einen Hinweis an habe ihre noch nicht eingestellt.

Verwenden Sie die IP-Adresse nicht, um den Standort (und damit die Zeitzone) definitiv zu bestimmen – denn bei NAT, Proxys (immer beliebter) und VPNs spiegeln IP-Adressen nicht unbedingt realistisch den tatsächlichen Standort des Benutzers wider, sondern den Standort, an dem sich der Benutzer befindet Server, die diese Protokolle implementieren, befinden sich.

Ähnlich wie US-Vorwahlen angesichts der Beliebtheit der Nummernübertragbarkeit nicht mehr zum Auffinden eines Telefonbenutzers nützlich sind.

IP-Adresse und andere oben gezeigte Techniken sind nützlich für schlägt einen Standard vor die der Benutzer anpassen/korrigieren kann.

Wenn Sie es verwenden OpenID zur Authentifizierung, Einfache Registrierungserweiterung würde das Problem für authentifizierte Benutzer lösen (Sie müssen von tz in numerisch konvertieren).

Eine andere Möglichkeit wäre, die Zeitzone aus der Länderpräferenz des Benutzeragenten abzuleiten.Dies ist eine etwas grobe Methode (funktioniert nicht in den USA), liefert aber einen guten Näherungswert.

Hier ist ein Artikel (mit Quellcode), der erklärt, wie man die lokalisierte Zeit in einer ASP.NET-Anwendung (VB.NET, C#) ermittelt und verwendet:

Es ist Zeit

Kurz gesagt, der beschriebene Ansatz basiert auf JavaScript getTimezoneOffset Funktion, die den Wert zurückgibt, der im Sitzungscookie gespeichert und von CodeBehind verwendet wird, um Zeitwerte zwischen GMT und Ortszeit anzupassen.Das Schöne daran ist, dass der Benutzer die Zeitzone nicht angeben muss (der Code erledigt dies automatisch).Es ist mehr Aufwand erforderlich (deshalb verlinke ich auf den Artikel), aber der bereitgestellte Code macht die Verwendung wirklich einfach.Ich vermute, dass Sie die Logik in PHP und andere Sprachen konvertieren können (sofern Sie ASP.NET verstehen).

Mit JavaScript und PHP ist es ganz einfach:

Auch wenn der Benutzer mit seiner internen Uhr und/oder Zeitzone herumspielen kann, bleibt der beste Weg, den ich bisher gefunden habe, um den Offset zu ermitteln, bestehen new Date().getTimezoneOffset();.Es ist nicht-invasiv, verursacht keine Kopfschmerzen und macht die Abhängigkeit von Dritten überflüssig.

Sagen wir, ich habe einen Tisch, users, das ein Feld enthält date_created int(13), zum Speichern von Unix-Zeitstempeln;

Vorausgesetzt, es handelt sich um einen Kunden creates a new account, Daten werden empfangen von post, und ich muss insert/update Die date_created column mit dem Unix-Zeitstempel des Clients, nicht mit dem des Servers.

Da der timezoneOffset zum Zeitpunkt des Einfügens/Aktualisierens benötigt wird, wird er als zusätzliches $_POST-Element übergeben, wenn der Client das Formular sendet. Dadurch entfällt die Notwendigkeit, ihn in Sitzungen und/oder Cookies zu speichern, und es gibt auch keine zusätzlichen Serverzugriffe.

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;

Angenommen, der Server empfängt tzo als $_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);

Einfügen/aktualisieren date_created=$user_timestamp.

Beim Abrufen von date_created können Sie den Zeitstempel wie folgt konvertieren:

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

Nun könnte dieses Beispiel Ihren Bedürfnissen entsprechen, wenn es um das Einfügen von a geht first Zeitstempel...Wenn es um einen zusätzlichen Zeitstempel oder eine zusätzliche Tabelle geht, sollten Sie erwägen, den tzo-Wert zur späteren Bezugnahme in die Benutzertabelle einzufügen oder ihn als Sitzung oder als Cookie festzulegen.

P.S.ABER was ist, wenn der Benutzer reist und die Zeitzone wechselt?Meldet sich um GMT+4 an, geht schnell zu GMT-1 und meldet sich erneut an.Der letzte Login liegt in der Zukunft.

Ich finde...wir denken zu viel.

Sie könnten es auf dem Client mit tun Moment-Zeitzone und den Wert an den Server senden;Beispielverwendung:

> moment.tz.guess()
"America/Asuncion"

Eine einfache Möglichkeit, dies zu tun, besteht darin, Folgendes zu verwenden:

new Date().getTimezoneOffset();

Das Erhalten eines gültigen Zeitzonennamens für die TZ-Datenbank in PHP ist ein zweistufiger Prozess:

  1. Erhalten Sie mit JavaScript den Zeitzonenversatz in Minuten getTimezoneOffset.Dieser Offset ist positiv, wenn die lokale Zeitzone hinter UTC liegt, und negativ, wenn sie vor UTC liegt.Daher müssen Sie dem Offset ein entgegengesetztes Vorzeichen hinzufügen.

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

    Übergeben Sie diesen Offset an PHP.

  2. Konvertieren Sie diesen Offset in PHP mit in einen gültigen Zeitzonennamen timezone_name_from_abbr Funktion.

    // 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;</code></pre>
    

Ich habe dazu einen Blogbeitrag geschrieben: So erkennen Sie die Benutzerzeitzone in PHP.Es enthält auch eine Demo.

Eine mögliche Option ist die Verwendung von Date Header-Feld, das in definiert ist RFC 7231 und soll die Zeitzone enthalten.Natürlich kann nicht garantiert werden, dass es sich bei dem Wert tatsächlich um die Zeitzone des Clients handelt, aber es kann ein praktischer Ausgangspunkt sein.

So mache ich es.Dadurch wird die PHP-Standardzeitzone auf die lokale Zeitzone des Benutzers festgelegt.Fügen Sie einfach Folgendes oben auf allen Ihren Seiten ein:

<?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
?>

Probieren Sie diesen PHP-Code aus:

<?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'];
?>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top