Konvertiert den UTC-Offset in eine Zeitzone oder ein Datum
Ein Kopfkratzer für Sie.
Ich greife nach Geo-IP-Daten vonIPInfoDBAPI von und es gibt einen Zeitzonen-Offset von UTC zurückeinschließlich DST (falls aktuell reflektiert).
Zum Beispiel lebe ich in EST (-5) und derzeit ist es DST, so dass die Geo-IP-API zurückgibt (-04:00
) als Offset.
Dies ist wunderbar, da die Sommerzeit ein verdammter Kopfschmerz ist. Aber zu meiner Überraschung verursachte es weitere Kopfschmerzen.
Ich lade diese Daten in PHP, um sie über AJAX an die Anwendung weiterzuleiten. Ich möchte die aktuelle Ortszeit der IP-Adresse in der App haben.
Ich habe das alles perfekt eingestellt, aber ich werde verrückt, um herauszufinden, wie man die PHP-Zeitzone so einstellt, dass sie mit dem Offset übereinstimmt, damit ich nur die aktuellen Stunden erfassen kanndate('H');
und Minutendate('i');
über AJAX zu übergeben.
Ich bin mir nicht sicher, ob es eine bestimmte Funktion gibt, die nur die aktuellen Stunden und Minuten basierend auf diesem Versatz anzeigt, oder ob es eine praktische Möglichkeit gibt, die Zeitzone basierend auf dem Versatz festzulegen (bei der die Sommerzeit bereits angewendet wird, wenn sie in Kraft ist). .
Ich habe Google durchsucht, um eine Antwort darauf zu finden, aber was ich tue, ist spezifischer, da die Sommerzeit bereits angewendet wird.
Ich habe eine Funktion gefundenPHP.net das scheint den Trick zu tun (es funktioniert für meine Zeitzone und gibt die richtige Zeit zurück), obwohl es für andere Zeitzonen wie PST 1 Stunde später zurückgibt, als es sein sollte, obwohl der Versatz korrekt ist (-07:00
mit Sommerzeit).
Die von der Funktion zurückgegebene Zeitzone istChile/EasterIsland
Was ich habe, ist die Ursache. Wenn ich könnte, würde ich das nur für die USA machen, aber ich brauche es, um weltweit zu sein.
Das ist die Funktion, die ich jetzt habe. Bitte entschuldigen Sie den extrem unordentlichen Code. Ich habe in den letzten Stunden mit vielen Dingen herumgespielt, um eine Lösung zu finden.
Die meisten Funktionen wurden 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 / Fall für bestimmte Zeitzonen aufgenommen, die sind:30
und:45
dort draußen. Es kann eine Möglichkeit geben, dies auch ohne die Notwendigkeit des Schalters / Gehäuses zu berücksichtigen.
HINWEIS: Die Offsets werden immer als solche zurückgegeben+00:00
oder-00:00
von der Geo-IP-API.
Ich würde mich über jede Hilfe oder einen Hinweis in die richtige Richtung freuen. Ich bin nicht sehr unerfahren mit PHP, aber Offsets sind eine neue Geschichte für mich. Vielen Dank!