Ein Denkanstoß für Sie.
Ich greife auf geografische IP-Daten aus IPInfoDB API und gibt eine Zeitzonenabweichung von der UTC zurück einschließlich Sommerzeit (falls derzeit berücksichtigt).
Ich lebe zum Beispiel in EST (-5) und derzeit ist Sommerzeit, also gibt die geo IP API ( -04:00
) als Offset.
Das ist wunderbar, denn die Sommerzeit bereitet uns verdammte Kopfschmerzen. Aber zu meiner Überraschung verursachte es noch weitere Kopfschmerzen.
Ich lade diese Daten in PHP, damit sie über AJAX an die Anwendung weitergegeben werden können. Ich möchte die Live-Lokalzeit der IP-Adresse in der Anwendung haben.
Ich habe das alles perfekt eingestellt, aber ich werde verrückt, wenn ich versuche herauszufinden, wie ich die PHP-Zeitzone so einstellen kann, dass sie mit dem Offset übereinstimmt, damit ich einfach die aktuellen Stunden abrufen kann date('H');
und Minuten date('i');
über AJAX zu übergeben.
Ich bin unsicher, ob es eine spezifische Funktion gibt, die mir nur die aktuellen Stunden und Minuten auf der Grundlage dieses Offsets geben kann, oder ob es eine praktische Möglichkeit gibt, die Zeitzone auf der Grundlage des Offsets einzustellen (bei der die Sommerzeit bereits angewendet wird, wenn sie in Kraft ist).
Ich habe Google durchforstet, um eine Antwort auf diese Frage zu finden, aber was ich tue, ist spezifischer, da die Sommerzeit bereits angewendet wird.
Ich habe eine Funktion gefunden unter PHP.net das scheint zu funktionieren (es funktioniert für meine Zeitzone und liefert die korrekte Zeit), obwohl es für andere Zeitzonen wie PST 1 Stunde später kommt als es sein sollte, obwohl der Offset korrekt ist ( -07:00
mit Sommerzeit).
Die von der Funktion zurückgegebene Zeitzone ist Chile/EasterIsland
Ich habe das Gefühl, dass das die Ursache ist. Wenn ich könnte, würde ich es nur für die USA funktionieren lassen, aber ich brauche es weltweit.
Das ist die Funktion, die ich jetzt habe. Bitte entschuldigen Sie den extrem unordentlichen Code. Ich habe herumspielen mit Tonnen von Dingen in den letzten Stunden versucht, eine Lösung herauszufinden.
Der größte Teil der Funktionalität wurde online gefunden.
function offsetToTZ($offset) {
switch((string) $offset) {
case '-04:30' : return 'America/Caracas'; break;
case '-03:30' : return 'Canada/Newfoundland'; break;
case '+03:30' : return 'Asia/Tehran'; break;
case '+04:30' : return 'Asia/Kabul'; break;
case '+05:30' : return 'Asia/Kolkata'; break;
case '+05:45' : return 'Asia/Kathmandu'; break;
case '+09:30' : return 'Australia/Darwin'; break;
}
$offset = (int) str_replace(array('0',0,':00',00,'30',30,'45',45,':','+'),'', (string) $offset);
$offset = $offset*60*60;
$abbrarray = timezone_abbreviations_list();
foreach ($abbrarray as $abbr) {
foreach($abbr as $city) {
if($city['offset'] == $offset) {
return $city['timezone_id'];
}
}
}
return false;
}
Ich habe den Schalter/Koffer für bestimmte Zeitzonen, die :30
y :45
da draußen. Vielleicht gibt es eine Möglichkeit, das auch ohne den Schalter/das Gehäuse einzubauen.
HINWEIS: Die Offsets werden immer als solche zurückgegeben +00:00
o -00:00
von der geo IP API.
Ich wäre dankbar für jede Hilfe oder einen Hinweis auf die richtige Richtung. Ich bin nicht sehr Anfänger mit PHP, aber Offsets sind eine neue Geschichte für mich. Danke!