Hourora

Сочетания клавиш

/
Найти город
H
Переключить 12- / 24-часовой формат
S
Показать или скрыть секунды
T
Тема: день, ночь, автоматически
P
Остановить или возобновить вращение глобуса
?
Этот список
RU

Для разработчиков

Бесплатный API часовых поясов

Тот же движок, на котором работает Hourora, в виде простого JSON: время в любой точке мира, перевод времени с учётом летнего времени, все пояса IANA и их переводы часов. Без ключа и регистрации.

Коротко о главном

Базовый URL
https://hourora.app/api/v1
Формат
JSON (UTF-8), только GET-запросы
Аутентификация
Нет: без ключа, без регистрации, без cookie
CORS
Открыт для любых источников, поэтому его можно вызывать из браузера
Ограничение частоты
120 запросов в минуту на клиента
Данные о времени
IANA tzdata 2026e, скомпилировано Hourora
Машиночитаемое описание
Документ OpenAPI 3.1

Попробуйте вживую

Выберите пример или измените путь, затем отправьте запрос. Запрос идёт из вашего браузера напрямую к API.

Ответ

Здесь появится ответ.

Эндпоинты

Каждый эндпоинт отвечает на GET в формате JSON. Время указывается в ISO 8601; смещения — в минутах к востоку от UTC (Нью-Йорк зимой — −300), а также текстом (−05:00).

Текущее время

GET/api/v1/time

Текущее время в часовом поясе или городе: местное время, смещение от UTC, аббревиатура, летнее время и ближайший перевод часов. Без параметров — UTC.

Параметры

ИмяЗначение
tzнеобязательныйНазвание часового пояса IANA, например Europe/London. Псевдонимы вроде Asia/Calcutta принимаются, в ответе возвращается актуальное название.
cityнеобязательныйSlug города вместо tz, например london (slug можно найти через /cities).

Пример запроса

curl "https://hourora.app/api/v1/time?tz=Europe/London"

Пример ответа

{
  "zone": "Europe/London",
  "local": "2026-10-14T01:59:03",
  "iso": "2026-10-14T01:59:03+01:00",
  "offsetMinutes": 60,
  "offset": "+01:00",
  "utcOffset": "UTC+1",
  "abbreviation": "BST",
  "dst": true,
  "city": null,
  "utc": "2026-10-14T00:59:03.910Z",
  "unixMs": 1791939543910,
  "date": "2026-10-14",
  "time": "01:59:03",
  "weekday": "Wednesday",
  "dayOfYear": 287,
  "isoWeek": 42,
  "dstObserved": true,
  "nextTransition": {
    "at": "2026-10-25T01:00:00.000Z",
    "unixMs": 1792890000000,
    "type": "dst-end",
    "fromOffsetMinutes": 60,
    "toOffsetMinutes": 0,
    "shiftMinutes": -60,
    "fromAbbreviation": "BST",
    "toAbbreviation": "GMT",
    "localBefore": "2026-10-25T02:00:00",
    "localAfter": "2026-10-25T01:00:00"
  },
  "tzdata": "2026e"
}

Реальный ответ этого сервера.

Перевод времени

GET/api/v1/convert

Время по часам в одном поясе, показанное в другом. Сообщает, если время попадает в пропуск при переводе часов (такого времени нет) или в повтор (оно наступает дважды).

Параметры

ИмяЗначение
fromобязательныйПояс (или slug города), в котором задано время.
toобязательныйПояс (или slug города), в котором его показать.
timeнеобязательныйВремя по часам в поясе from, YYYY-MM-DDTHH:mm (секунды необязательны, без смещения), 1970–2060. По умолчанию — сейчас.

Пример запроса

curl "https://hourora.app/api/v1/convert?from=America/New_York&to=Asia/Kolkata&time=2026-10-16T15:00"

Пример ответа

{
  "status": "ok",
  "requested": "2026-10-16T15:00:00",
  "utc": "2026-10-16T19:00:00.000Z",
  "unixMs": 1792177200000,
  "from": {
    "zone": "America/New_York",
    "local": "2026-10-16T15:00:00",
    "iso": "2026-10-16T15:00:00-04:00",
    "offsetMinutes": -240,
    "offset": "-04:00",
    "utcOffset": "UTC-4",
    "abbreviation": "EDT",
    "dst": true
  },
  "to": {
    "zone": "Asia/Kolkata",
    "local": "2026-10-17T00:30:00",
    "iso": "2026-10-17T00:30:00+05:30",
    "offsetMinutes": 330,
    "offset": "+05:30",
    "utcOffset": "UTC+5:30",
    "abbreviation": "IST",
    "dst": false,
    "dayOffset": 1
  },
  "differenceMinutes": 570,
  "tzdata": "2026e"
}

Реальный ответ этого сервера.

Список часовых поясов

GET/api/v1/zones

Все часовые пояса IANA с текущим смещением от UTC, аббревиатурой, режимом летнего времени, странами и главным городом.

Параметры

ИмяЗначение
countryнеобязательныйКод страны ISO 3166, например GB, чтобы оставить только эту страну.

Пример запроса

curl "https://hourora.app/api/v1/zones?country=GB"

Пример ответа

{
  "asOf": "2026-10-14T00:59:03.910Z",
  "count": 1,
  "tzdata": "2026e",
  "zones": [
    {
      "id": "Europe/London",
      "offsetMinutes": 60,
      "offset": "+01:00",
      "utcOffset": "UTC+1",
      "abbreviation": "BST",
      "dst": true,
      "countries": [
        "GB",
        "GG",
        "IM"
      ],
      "mainCity": "London"
    }
  ]
}

Реальный ответ этого сервера; списки сокращены до первых 3 элементов.

Один часовой пояс

GET/api/v1/zones/{id}

Один пояс IANA: его псевдонимы, страны и города, текущее смещение, ближайший перевод часов и все переводы за указанный год.

Параметры

ИмяЗначение
idв путиНазвание пояса IANA; сохраните косую черту или закодируйте её как %2F.
yearнеобязательныйГод, переводы часов в котором нужно перечислить, 1970–2060. По умолчанию — текущий год.

Пример запроса

curl "https://hourora.app/api/v1/zones/America%2FNew_York?year=2027"

Пример ответа

{
  "id": "America/New_York",
  "aliases": [
    "US/Eastern"
  ],
  "countries": [
    {
      "code": "US",
      "name": "United States"
    }
  ],
  "cities": [
    {
      "slug": "new-york",
      "name": "New York"
    },
    {
      "slug": "philadelphia",
      "name": "Philadelphia"
    },
    {
      "slug": "miami",
      "name": "Miami"
    }
  ],
  "now": {
    "zone": "America/New_York",
    "local": "2026-10-13T20:59:03",
    "iso": "2026-10-13T20:59:03-04:00",
    "offsetMinutes": -240,
    "offset": "-04:00",
    "utcOffset": "UTC-4",
    "abbreviation": "EDT",
    "dst": true,
    "utc": "2026-10-14T00:59:03.910Z",
    "standardOffsetMinutes": -300,
    "dstObserved": true
  },
  "nextTransition": {
    "at": "2026-11-01T06:00:00.000Z",
    "unixMs": 1793512800000,
    "type": "dst-end",
    "fromOffsetMinutes": -240,
    "toOffsetMinutes": -300,
    "shiftMinutes": -60,
    "fromAbbreviation": "EDT",
    "toAbbreviation": "EST",
    "localBefore": "2026-11-01T02:00:00",
    "localAfter": "2026-11-01T01:00:00"
  },
  "year": 2027,
  "dstObservedInYear": true,
  "transitions": [
    {
      "at": "2027-03-14T07:00:00.000Z",
      "unixMs": 1805007600000,
      "type": "dst-start",
      "fromOffsetMinutes": -300,
      "toOffsetMinutes": -240,
      "shiftMinutes": 60,
      "fromAbbreviation": "EST",
      "toAbbreviation": "EDT",
      "localBefore": "2027-03-14T02:00:00",
      "localAfter": "2027-03-14T03:00:00"
    },
    {
      "at": "2027-11-07T06:00:00.000Z",
      "unixMs": 1825567200000,
      "type": "dst-end",
      "fromOffsetMinutes": -240,
      "toOffsetMinutes": -300,
      "shiftMinutes": -60,
      "fromAbbreviation": "EDT",
      "toAbbreviation": "EST",
      "localBefore": "2027-11-07T02:00:00",
      "localAfter": "2027-11-07T01:00:00"
    }
  ],
  "tzdata": "2026e"
}

Реальный ответ этого сервера; списки сокращены до первых 3 элементов.

Поиск городов

GET/api/v1/cities

Города с подходящим названием — сначала лучшие совпадения и крупнейшие города, — каждый со страной, координатами и часовым поясом.

Параметры

ИмяЗначение
qобязательныйЧасть названия города, диакритика необязательна (не более 80 символов).
limitнеобязательныйСколько результатов, 1–50. По умолчанию 10.
countryнеобязательныйКод страны ISO 3166, например GB, чтобы оставить только эту страну.

Пример запроса

curl "https://hourora.app/api/v1/cities?q=lond&limit=3"

Пример ответа

{
  "query": "lond",
  "count": 3,
  "total": 7,
  "cities": [
    {
      "slug": "london",
      "name": "London",
      "asciiName": "London",
      "country": {
        "code": "GB",
        "name": "United Kingdom"
      },
      "region": "Westminster",
      "zone": "Europe/London",
      "lat": 51.5,
      "lng": -0.1167,
      "population": 7994105,
      "capital": true,
      "url": "https://hourora.app/en/london"
    },
    {
      "slug": "londrina",
      "name": "Londrina",
      "asciiName": "Londrina",
      "country": {
        "code": "BR",
        "name": "Brazil"
      },
      "region": "Paraná",
      "zone": "America/Sao_Paulo",
      "lat": -23.3,
      "lng": -51.18,
      "population": 496035,
      "capital": false,
      "url": "https://hourora.app/en/londrina"
    },
    {
      "slug": "london-ontario",
      "name": "London",
      "asciiName": "London",
      "country": {
        "code": "CA",
        "name": "Canada"
      },
      "region": "Ontario",
      "zone": "America/Toronto",
      "lat": 42.97,
      "lng": -81.25,
      "population": 340900,
      "capital": false,
      "url": "https://hourora.app/en/london-ontario"
    }
  ]
}

Реальный ответ этого сервера.

Один город

GET/api/v1/cities/{slug}

Один город по его slug, с текущим смещением его часового пояса и ближайшим переводом часов.

Параметры

ИмяЗначение
slugв путиSlug города, например tokyo.

Пример запроса

curl "https://hourora.app/api/v1/cities/tokyo"

Пример ответа

{
  "slug": "tokyo",
  "name": "Tokyo",
  "asciiName": "Tokyo",
  "country": {
    "code": "JP",
    "name": "Japan"
  },
  "region": "Tokyo",
  "zone": "Asia/Tokyo",
  "lat": 35.685,
  "lng": 139.7514,
  "population": 22006300,
  "capital": true,
  "url": "https://hourora.app/en/tokyo",
  "now": {
    "zone": "Asia/Tokyo",
    "local": "2026-10-14T09:59:03",
    "iso": "2026-10-14T09:59:03+09:00",
    "offsetMinutes": 540,
    "offset": "+09:00",
    "utcOffset": "UTC+9",
    "abbreviation": "JST",
    "dst": false,
    "utc": "2026-10-14T00:59:03.910Z"
  },
  "nextTransition": null,
  "tzdata": "2026e"
}

Реальный ответ этого сервера.

Часовой пояс по координатам

GET/api/v1/lookup

Ближайший город из списка к заданным широте и долготе и его часовой пояс. Это приближение: границы поясов не моделируются.

Параметры

ИмяЗначение
latобязательныйШирота в десятичных градусах, от −90 до 90.
lngобязательныйДолгота в десятичных градусах, от −180 до 180.

Пример запроса

curl "https://hourora.app/api/v1/lookup?lat=48.85&lng=2.35"

Пример ответа

{
  "query": {
    "lat": 48.85,
    "lng": 2.35
  },
  "approximate": true,
  "method": "nearest listed city (great-circle distance); time-zone borders are not modelled",
  "distanceKm": 2.2,
  "city": {
    "slug": "paris",
    "name": "Paris",
    "asciiName": "Paris",
    "country": {
      "code": "FR",
      "name": "France"
    },
    "region": "Île-de-France",
    "zone": "Europe/Paris",
    "lat": 48.8667,
    "lng": 2.3333,
    "population": 4957589,
    "capital": true,
    "url": "https://hourora.app/en/paris"
  },
  "zone": "Europe/Paris",
  "now": {
    "zone": "Europe/Paris",
    "local": "2026-10-14T02:59:03",
    "iso": "2026-10-14T02:59:03+02:00",
    "offsetMinutes": 120,
    "offset": "+02:00",
    "utcOffset": "UTC+2",
    "abbreviation": "CEST",
    "dst": true,
    "utc": "2026-10-14T00:59:03.910Z"
  },
  "tzdata": "2026e"
}

Реальный ответ этого сервера.

Версия данных

GET/api/v1/tzdata

Из какого выпуска базы данных часовых поясов IANA взяты ответы и когда Hourora последний раз обновляла данные.

Параметры

Без параметров.

Пример запроса

curl "https://hourora.app/api/v1/tzdata"

Пример ответа

{
  "version": "2026e",
  "source": "IANA Time Zone Database",
  "sourceUrl": "https://www.iana.org/time-zones",
  "dataDate": "2026-10-13",
  "range": {
    "from": "1970-01-01",
    "to": "2060-12-31"
  },
  "zones": 344,
  "links": 253,
  "cities": 7269,
  "note": "Outside the compiled range, offsets fall back to the server runtime's own tzdata."
}

Реальный ответ этого сервера.

Ошибки

Ошибка — это тоже JSON: HTTP-статус, стабильный код для вашей программы и сообщение для людей.

{
  "error": {
    "code": "unknown_zone",
    "message": "\"Mars/Base\" is not an IANA time zone name. List them with /api/v1/zones."
  }
}
СтатусКодыКогда
400missing_parameter, invalid_parameterПараметр отсутствует или имеет неожиданный формат.
404unknown_zone, unknown_city, unknown_country, not_foundТакого часового пояса, города, страны или эндпоинта нет.
429rate_limitedСлишком много запросов от вашего клиента; подождите столько секунд, сколько указано в Retry-After.
500internal_errorНа нашей стороне что-то пошло не так. Пожалуйста, повторите попытку позже.

Как это работает

Ограничения и кеширование

Каждый клиент может отправлять до 120 запросов в минуту, допускаются короткие всплески. Сверх этого API отвечает кодом 429 с заголовком Retry-After. Ограничение защищает бесплатный сервис; если нужно больше — кешируйте.

Каждый ответ указывает, как долго его можно кешировать (Cache-Control). Текущее время никогда не кешируется; списки поясов, сведения о городах и поиск по координатам — на пять минут; поиск городов и перевод конкретного времени — на сутки.

Делаете часы? Получите смещение один раз, отсчитывайте время локально и запросите его снова после ближайшего перевода часов, о котором сообщает ответ. Опрашивать API каждую секунду не нужно.

Откуда берутся ответы

Смещения, аббревиатуры и переводы часов берутся из собственной копии базы данных часовых поясов IANA, скомпилированной Hourora, выпуск 2026e, за 1970–2060 годы. Вне этого диапазона используются встроенные данные сервера, которые могут быть старее.

Перевод времени явно обрабатывает границы летнего времени: время, пропускаемое при переводе часов вперёд, отмечается как пропуск (gap), а время, которое наступает дважды при переводе назад, — как повтор (overlap) с обоими моментами.

Поиск по координатам возвращает ближайший из примерно 7 200 городов списка и часовой пояс этого города. У границы, в море или в малонаселённой местности он может отличаться от пояса, который фактически действует в этой точке.

Условия использования

Вопросы

Полезно знать

API Hourora действительно бесплатный?

Да. Нет ни ключа, ни учётной записи, ни платного тарифа. Ограничение частоты запросов для каждого клиента делает сервис честным для всех.

Можно ли вызывать его из JavaScript в браузере?

Да. Каждый эндпоинт разрешает кросс-доменные запросы с любого сайта (CORS), учётные данные не нужны.

Как API учитывает летнее время?

Каждый ответ вычисляется для точного момента по правилам IANA. Эндпоинт convert также сообщает, когда запрошенного времени по часам не существует (перевод вперёд) или оно наступает дважды (перевод назад).

Насколько точен поиск по координатам?

Он возвращает часовой пояс ближайшего города из списка, что верно почти везде, где живут люди. Границы поясов не моделируются, поэтому у границы или в море результат может быть неверным.