42 Stimmen

Wie man die Zeitzone anhand der IP-Adresse in PHP erhält

Ich möchte die Zeitzone über eine IP-Adresse in PHP erhalten. Tatsächlich habe ich eine Anwendung, die auf der Client-Maschine ausgeführt wird. Ich habe die IP-Adresse der Client-Maschine. Aber es gelingt mir nicht, die Zeitzone für jede Client-Maschine zu bekommen.

0 Stimmen

Versuchen Sie dies: sanjaykumarns.blogspot.com/p/…

43voto

Chandrika Shah Punkte 560
$ip = "189.240.194.147";  //$_SERVER['REMOTE_ADDR']
$ipInfo = file_get_contents('http://ip-api.com/json/' . $ip);
$ipInfo = json_decode($ipInfo);
$timezone = $ipInfo->timezone;
date_default_timezone_set($timezone);
echo date_default_timezone_get();
echo date('Y/m/d H:i:s');

Manchmal funktioniert es nicht auf dem lokalen Server, also versuche es auf dem Server.

Bearbeitung: Diese Daten stammen von ip-api.com, sie dürfen kostenlos genutzt werden, solange Sie nicht mehr als 45 Anfragen pro Minute stellen und nicht kommerziell verwenden. Sehen Sie sich ihre AGB an, keine lange Seite.

0 Stimmen

Sehr hilfreich hat mir viel Zeit gespart

15voto

John Saunders Punkte 159011

Die IP-Adresse kann nicht einmal zuverlässig einem Land zugeordnet werden; man bewegt sich auf dünnem Eis, wenn man auch die Zeitzone erhalten möchte. Es ist besser, dass der Client Ihnen die Zeitzone sendet, vielleicht in einem Header.

Siehe Tor: Anonymität online für yet einen weiteren Grund, IP-Adressen für Dinge zu stoppen, für die sie nicht vorgesehen waren.

16 Stimmen

Oftmals bieten Sie dem Benutzer jedoch "beste Vermutungen" für automatisch ausgefüllte Formularfelder an, in diesem Fall ist überhaupt nichts falsch daran.

0 Stimmen

Nichts falsch mit was?

5 Stimmen

Es ist nichts falsch daran, eine IP-Adresse zur Annäherung an eine Zeitzone zu verwenden.

12voto

vartec Punkte 124396

Wenn Sie es auf dem lokalen Computer ausführen, können Sie die konfigurierte Zeitzone überprüfen.
http://www.php.net/manual/en/function.date-default-timezone-get.php

Es gibt eine Menge besserer und zuverlässigerer Methoden als den Versuch, die Zeitzone mithilfe von GeoIP zu erraten. Wenn Sie sich experimentierfreudig fühlen, versuchen Sie es doch mal: http://www.php.net/manual/en/book.geoip.php

$region = geoip_region_by_name('www.example.com');
$tz = geoip_time_zone_by_country_and_region($region['country_code'],
                                            $region['region']);

0 Stimmen

Die Anwendung läuft auf dem lokalen Rechner, aber ich möchte die Zeitzone über die IP auf der Serverseite, nicht auf dem lokalen Rechner, erhalten.

0 Stimmen

Ich würde gerne eine lokale Kopie der GeoIP-Zeitzonendaten haben.

10voto

cgp Punkte 40346

Es gibt keinen absolut sicheren Weg, die Zeitzone des Clients zu ermitteln, aber wenn der Client das Datum und die Uhrzeit von seinem Gerät übermittelt, können Sie es basierend darauf berechnen, was die Zeit relativ zu GMT ist. Also, wenn es auf ihrem Gerät 19:00 Uhr ist und es 00:00 Uhr GMT ist, können Sie feststellen, dass sie -5 von GMT entfernt sind oder (EST/DST)

6 Stimmen

Zeitzonen sind ziemlich schwierig, so wie die meisten Internationalisierungsprobleme. Wenn du ihre aktuelle Zeit kennst UND ob sie sich in der Sommerzeit befinden oder nicht, dann kannst du ihre Zeitzone bestimmen. Das Feststellen der Sommerzeit ist jedoch sehr schwierig (erneut)

4 Stimmen

Das ist eine großartige Idee in der Theorie, bis man die Sommerzeit berücksichtigt. Das lässt mich weinen wollen.

0 Stimmen

Dies ist eine großartige Idee. Und die Sommerzeit macht keinen Unterschied, da wir auf dem Server sowieso immer GMT speichern :)

9voto

masud_moni Punkte 1073

Es ist keine gute Idee, die Zeitzone eines Benutzers anhand seiner IP-Adresse zu suchen, da er von verschiedenen Orten zu verschiedenen Zeiten auf sein Konto zugreifen kann. Es ist also unmöglich, seine Zeitzone über die IP-Adresse zu ermitteln. Aber ich habe versucht, eine Lösung zu finden und gebe hier meinen Code an. Jede Kritik an der Kodierungstechnik wird sehr geschätzt.

getLocation();
                $tz_lat   = $location['latitude'];
                $tz_long  = $location['longitude'];

                $theta    = $cur_long - $tz_long;
                $distance = (sin(deg2rad($cur_lat)) * sin(deg2rad($tz_lat)))
                    + (cos(deg2rad($cur_lat)) * cos(deg2rad($tz_lat)) * cos(deg2rad($theta)));
                $distance = acos($distance);
                $distance = abs(rad2deg($distance));
                // echo ''.$timezone_id.' '.$distance;

                if (!$time_zone || $tz_distance > $distance) {
                    $time_zone   = $timezone_id;
                    $tz_distance = $distance;
                }

            }
        }
        return  $time_zone;
    }
    return 'unknown';
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X