2016-10-20 6 views
1

Ich habe eine Zeitzone Namen auf einem bereitgestellten UTC Offset-Basis zu bekommen versucht, aber ich kann nicht scheinen, um es für 30 Minuten Offsets arbeiten (dh UTC+09:30)timezone_name_from_abbr schlägt mit 30 Minuten versetzt

<?php 
function timeZoneTest($input) { 
    if ($returnValue = timezone_name_from_abbr('', 60 * 60 * $input, 0)) { 
    return $returnValue; 
    } else { 
    return 'Time Zone Not Found'; 
    } 
} 

echo timeZoneTest(9) . '<br>'; 
echo timeZoneTest(9.5) . '<br>'; 

Diese Rückgabe:

Asia/Tokyo 
Time Zone Not Found 

Sollte nicht 9,5 Rückkehr Australia/Adelaide oder zumindest eine gültige pHP-Zeitzone? Jede Hilfe wäre willkommen!

Antwort

1

verwenden:

<?php 

function tz_offset_to_name($offset) 

{ 
     $offset *= 3600; // convert hour offset to seconds 
     $abbrarray = timezone_abbreviations_list(); 
     foreach ($abbrarray as $abbr) 
     { 
       foreach ($abbr as $city) 
       { 
         if ($city['offset'] == $offset) 
         { 
           return $city['timezone_id']; 
         } 
       } 
     } 

     return FALSE; 
} 

echo tz_offset_to_name(9) . '<br>'; 
echo tz_offset_to_name(9.5) . '<br>'; 

?> 

Das Ergebnis wird sein:

Asia/Tokyo 
Australia/Adelaid 

DEMO

https://repl.it/EBSO/0

manchmal

---

timezone_name_from_abbr() gibt FALSE anstelle eines tatsächlichen Zeitzone: http://bugs.php.net/44780

+0

Dies funktioniert, danke! Obwohl es einige seltsame Ergebnisse (-10, -9, -8 alle Rückkehr @ America/Anchorage @. Ich habe nicht erwartet, dass verschiedene UTC Offsets würde die gleiche Zeitzone Name zurückgeben, aber dies ist aufgrund der Sommerzeit sinnvoll Ich werde neu darüber nachdenken, wie ich mich dem größeren Problem anschließe Auch der Fehler, mit dem Sie verlinkt haben, wurde vor langer Zeit geschlossen und "repariert" ... – joyleak

Verwandte Themen