Bestimmen Sie die Zeitzone eines Benutzers

23 answers
  •  -new Date().getTimezoneOffset()/60;
     

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

    Um dies in Stunden zu setzen, dividieren Sie durch 60. Beachten Sie auch, dass das Zeichen das Gegenteil von dem ist, was Sie brauchen - Es berechnet den GMT-Versatz von Ihrer Zeitzone, nicht den Versatz Ihrer Zeitzone von GMT. Um dies zu beheben, multiplizieren Sie einfach mit -1.

    Beachten Sie auch, dass w3school sagt:

    Der zurückgegebene Wert ist keine Konstante, da die Sommerzeit verwendet wird.

    30 May 2018
    Rann LifshitzCato Johnston
  • Die beliebteste (== standard?) Methode, um die Zeitzone zu bestimmen, die ich in der Umgebung gesehen habe, ist einfach , die Benutzer selbst zu fragen. Wenn Ihre Website ein Abonnement erfordert, könnte dies gespeichert werden in den Profildaten der Benutzer. Für andere Benutzer können die Datumsangaben als UTC oder GMT angezeigt werden.

    Ich versuche nicht, ein kluger Kerl zu sein. Es ist nur so, dass manchmal einige Probleme außerhalb des Programmierkontextes feinere Lösungen haben.

    10 September 2013
    Ishmaeel
  • Es gibt keine HTTP-Header, die die Zeitzone der Clients bisher berichten, obwohl vorgeschlagen wurde, sie in die HTTP-Spezifikation aufzunehmen.

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

    01 August 2008
    Mads Kristiansen
  • Javascript ist der einfachste Weg, um die Ortszeit des Kunden zu ermitteln. Ich würde vorschlagen, ein XMLHttpRequest zu verwenden, um die Ortszeit zurückzusenden, und falls dies fehlschlägt, können Sie auf die Zeitzone zurückgreifen, die anhand ihrer IP-Adresse ermittelt wurde. Ich habe MaxMind GeoIP für mehrere Projekte verwendet Stellen Sie sicher, ob sie Zeitzonen-Daten bereitstellen. Es ist eine Dienstleistung, für die Sie bezahlen, und die Ihre Datenbank monatlich aktualisiert. Sie bieten Wrapper in mehreren Web-Sprachen an.

    04 May 2012
    mattytommoSkooz
  • Hier finden Sie 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

    03 February 2015
    Adam
  • Hier ist ein vollständigerer Weg:

    1. Liefert den Zeitzonenversatz für den Benutzer
    2. Test einige Tage an DLS-Grenzen, um festzustellen, ob sie sich in einer Zone befinden, in der DLS verwendet wird.

    Außer unten:

     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)

    02 February 2015
    Joseph Lust
  • Mit dem Ansatz von Unkwntech habe ich eine Funktion mit jQuery und PHP geschrieben. Dies wurde getestet und funktioniert!

    Auf der PHP-Seite, auf der Sie die Zeitzone als Variable haben möchten, sollten Sie dieses Codefragment irgendwo oben auf der Seite haben:

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

    Dies liest die Sitzungsvariable "time", die wir gerade erstellen.

    Auf derselben Seite in der müssen Sie zunächst jQuery angeben:

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

    Fügen Sie auch unterhalb von 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://domain.com/timezone.php",
                    data: 'time='+ visitortimezone,
                    success: function(){
                        location.reload();
                    }
                });
            }
        });
    </script>
     

    Sie können oder dürfen nicht bemerkt, aber Sie müssen die URL in Ihre tatsächliche Domäne ändern.

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

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

    Wenn dies ordnungsgemäß funktioniert, wird zuerst die Seite geladen, das JavaScript ausgeführt und die Seite neu geladen. Sie können dann die $ timezone-Variable lesen und zu Ihrem Vergnügen verwenden! Sie gibt den aktuellen UTC / GMT-Zeitzonen-Offset (GMT -7) oder die Zeitzone zurück, in der Sie sich befinden.

    04 January 2012
    the Tin ManEqbal
  • Verstehen Sie zunächst, dass die Zeitzonenerkennung in JavaScript nicht perfekt ist. Sie können den lokalen Zeitzonen-Offset für ein bestimmtes Datum und eine bestimmte Uhrzeit mit getTimezoneOffset für eine Instanz des Date -Objekts abrufen. Dies ist jedoch nicht ganz dasselbe wie ein vollständiger IANA-Zeitzone wie America/Los_Angeles.

    Es gibt einige Optionen, die funktionieren können :

    • Die meisten modernen Browser unterstützen IANA-Zeitzonen bei der Implementierung von ECMAScript Internationalization API . Sie können also Folgendes tun:

       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 . Erweitern Sie den Abschnitt DateTimeFormat und sehen Sie sich die Funktion mit dem Namen resolvedOptions().timeZone defaults to the host environment an.

    • Wenn Sie eine größere Anzahl von Umgebungen unterstützen möchten, z. B. ältere Webbrowser können Sie eine Bibliothek verwenden, um eine fundierte Vermutung in der Zeitzone zu erstellen. Sie funktionieren, indem Sie zunächst die Intl -API ausprobieren, wenn sie verfügbar ist. Wenn sie nicht verfügbar ist, fragen Sie die Funktion getTimezoneOffset des Date -Objekts zu verschiedenen Zeitpunkten ab und verwenden die Ergebnisse, um eine geeignete Zeitzone auszuwählen aus einem internen Datensatz.

      Sowohl jsTimezoneDetect als auch < a href = "https://momentjs.com/timezone" rel = "noreferrer"> moment-timezone verfügt über diese Funktionalität.

       // 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 gedacht werden. Die Vermutung kann in vielen Fällen korrekt sein, jedoch nicht in allen.

      Außerdem müssen diese Bibliotheken regelmäßig aktualisiert werden, um der Tatsache entgegenzuwirken

    27 December 2017
    Matt JohnsonBrad Cunningham
  • Ich habe hier immer noch keine detaillierte Antwort erhalten, die die Zeitzone abruft. Sie sollten nicht nach IP-Adresse geokodieren, PHP (lol) verwenden oder aufgrund eines Offsets falsch schätzen.

    Erstens ist eine Zeitzone nicht nur ein Versatz von GMT. Es ist ein Gebiet, in dem die Zeitregeln durch lokale Standards festgelegt werden. In einigen Ländern ist Sommerzeitumstellung, und die Sommerzeit wird zu unterschiedlichen Zeiten eingeschaltet. In der Regel ist es wichtig, die tatsächliche Zone abzurufen, nicht nur den aktuellen Versatz.

    Wenn Sie diese Zeitzone speichern möchten, z. B. in den Benutzervorgaben, möchten Sie die Zone und nicht nur den Versatz . Für Echtzeit-Conversions spielt es keine Rolle.

    Um die Zeitzone mit Javascript zu erhalten, 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.
     

    Es war jedoch einfacher, dieses robuste Plugin zu verwenden, das die Olsen-formatierte Zeitzone zurückgibt:

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

    30 August 2012
    Keyo
  • Um den Zeitzonen-Offset als HTTP-Header bei AJAX-Anforderungen mit jQuery

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

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

    27 March 2017
    philfreo