Tools\Utility\Time::timezoneByCoordinates PHP Method

timezoneByCoordinates() public static method

Gets the timezone that is closest to the given coordinates
Deprecation: Would need Geo plugin to work
public static timezoneByCoordinates ( float $lat, float $lng ) : DateTimeZone
$lat float
$lng float
return DateTimeZone Timezone object
    public static function timezoneByCoordinates($lat, $lng)
    {
        $current = ['timezone' => null, 'distance' => 0];
        $identifiers = DateTimeZone::listIdentifiers();
        foreach ($identifiers as $identifier) {
            $timezone = new DateTimeZone($identifier);
            $location = $timezone->getLocation();
            $point = ['lat' => $location['latitude'], 'lng' => $location['longitude']];
            $distance = (int) Calculator::calculateDistance(compact('lat', 'lng'), $point);
            if (!$current['distance'] || $distance < $current['distance']) {
                $current = ['timezone' => $identifier, 'distance' => $distance];
            }
        }
        return $current['timezone'];
    }

Usage Example

Esempio n. 1
0
 /**
  * TimeTest::testTimezoneByCoordinates()
  *
  * @return void
  */
 public function testTimezoneByCoordinates()
 {
     $this->skipIf(true);
     $result = $this->Time->timezoneByCoordinates(48, 11);
     $this->assertEquals('Europe/Vaduz', $result);
 }