You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

66 lines
1.5 KiB

  1. <?php
  2. function timezone_for_location($lat, $lng) {
  3. $tz = \p3k\Timezone::timezone_for_location($lat, $lng);
  4. $timezone = false;
  5. if($tz) {
  6. $timezone = new p3k\timezone\Result($tz);
  7. }
  8. if($timezone) {
  9. return [
  10. 'timezone' => $timezone->name,
  11. 'offset' => $timezone->offset,
  12. 'seconds' => $timezone->seconds,
  13. 'localtime' => $timezone->localtime
  14. ];
  15. } else {
  16. return [
  17. 'error' => 'not_found',
  18. 'error_description' => 'No timezone was found for the requested location'
  19. ];
  20. }
  21. }
  22. $app->get('/api/timezone', function() use($app) {
  23. $params = $app->request()->params();
  24. if(k($params, 'latitude') !== null && k($params, 'longitude') !== null) {
  25. $lat = (float)$params['latitude'];
  26. $lng = (float)$params['longitude'];
  27. $result = timezone_for_location($lat, $lng);
  28. json_response($app, $result);
  29. } elseif(k($params, 'airport')) {
  30. $code = $params['airport'];
  31. $airport = \p3k\Airports::from_code($code);
  32. if($airport) {
  33. $result = timezone_for_location($airport['latitude'], $airport['longitude']);
  34. if(!isset($result['error'])) {
  35. $result['airport'] = $airport;
  36. }
  37. json_response($app, $result);
  38. } else {
  39. json_response($app, [
  40. 'error' => 'not_found',
  41. 'error_description' => 'The airport code was not found'
  42. ]);
  43. }
  44. } else {
  45. json_response($app, [
  46. 'error' => 'invalid_request',
  47. 'error_description' => 'Request was missing parameters'
  48. ], 400);
  49. }
  50. });