Сейчас в экосистеме gravity-ui нет единого формата таймзон, из-за чего каждая команда реализует выбор и отображение по-своему (и на клиенте, и на backend). Это приводит к расхождениям, особенно с учётом DST и локализации.
Также это вопрос бренда gravity-ui, стандартного восприятия выбора таймзоны пользователями сайтов/web-приложений на gravity-ui.
Используем полифил для поддержки для старых браузеров, Intl.DisplayNames, на всякий случай:
Я в своей реализации UI использую компонент Select c filterable true.
Сразу возвращать json типовой не представляется возможным, так как он не будет учитывать локализацию и «летнее время».
Вот такой json например, генерируется в яндекс профиле, посмотрев на него ты видишь стандартизированную и понятную структуру.
[
{
"code": "Pacific/Niue",
"name": "(UTC-11:00) Алофи"
},
{
"code": "Pacific/Pago_Pago",
"name": "(UTC-11:00) Паго-Паго"
},
{
"code": "Pacific/Honolulu",
"name": "(UTC-10:00) Гонолулу, Хило, Милилани"
},
{
"code": "Pacific/Rarotonga",
"name": "(UTC-10:00) Аваруа, Аитутаки"
},
{
"code": "Pacific/Tahiti",
"name": "(UTC-10:00) Папеэте, Хуахине, Маупити"
},
{
"code": "Pacific/Marquesas",
"name": "(UTC-09:30) Нуку Хива"
},
{
"code": "America/Anchorage",
"name": "(UTC-08:00) Анкоридж, Фэрбанкс, Ситка"
},
{
"code": "America/Juneau",
"name": "(UTC-08:00) Джуно, Кетчикан"
},
{
"code": "America/Dawson",
"name": "(UTC-07:00) Доусон"
},
{
"code": "America/Dawson_Creek",
"name": "(UTC-07:00) Форт-Сент-Джон, Кранбрук, Досон-Крик"
},
{
"code": "America/Hermosillo",
"name": "(UTC-07:00) Эрмосильо, Сьюдад-Обрегон, Ногалес"
},
{
"code": "America/Los_Angeles",
"name": "(UTC-07:00) Сан-Франциско, Лос-Анджелес, Сан-Диего"
},
{
"code": "America/Phoenix",
"name": "(UTC-07:00) Финикс, Тусон, Меса"
},
{
"code": "America/Tijuana",
"name": "(UTC-07:00) Тихуана, Мехикали, Энсенада"
},
{
"code": "America/Vancouver",
"name": "(UTC-07:00) Ванкувер, Суррей, Бернаби"
},
{
"code": "America/Whitehorse",
"name": "(UTC-07:00) Уайтхорс"
},
{
"code": "America/Belize",
"name": "(UTC-06:00) Белиз, Сан-Игнасио, Бельмопан"
},
{
"code": "America/Boise",
"name": "(UTC-06:00) Бойсе, Меридиан, Айдахо-Фолс"
},
{
"code": "America/Chihuahua",
"name": "(UTC-06:00) Чиуауа, Кульякан, Масатлан"
},
{
"code": "America/Ciudad_Juarez",
"name": "(UTC-06:00) Сьюдад-Хуарес"
},
{
"code": "America/Costa_Rica",
"name": "(UTC-06:00) Сан-Хосе, Картаго, Лимон"
},
{
"code": "America/Denver",
"name": "(UTC-06:00) Денвер, Альбукерке, Колорадо-Спрингс"
},
{
"code": "America/Edmonton",
"name": "(UTC-06:00) Калгари, Эдмонтон, Ред Дир"
},
{
"code": "America/Guatemala",
"name": "(UTC-06:00) Гватемала, Сан-Сальвадор, Кесальтенанго"
},
{
"code": "America/Managua",
"name": "(UTC-06:00) Манагуа, Матагальпа, Леон"
},
{
"code": "America/Merida",
"name": "(UTC-06:00) Мерида, Чичен-Ица"
},
{
"code": "America/Mexico_City",
"name": "(UTC-06:00) Мехико, Гвадалахара, Леон"
},
{
"code": "America/Monterrey",
"name": "(UTC-06:00) Монтеррей, Сан-Педро-Гарса-Гарсия"
},
{
"code": "America/Regina",
"name": "(UTC-06:00) Мус-Джо, Свифт-Керрент, Йорктон"
},
{
"code": "America/Swift_Current",
"name": "(UTC-06:00) Саскатун, Реджайна, Принс-Альберт"
},
{
"code": "America/Tegucigalpa",
"name": "(UTC-06:00) Сан-Педро-Сула, Тегусигальпа, Ла-Сейба"
},
{
"code": "America/Yellowknife",
"name": "(UTC-06:00) Йеллоунайф, Хей-Ривер, Инувик"
},
{
"code": "Pacific/Easter",
"name": "(UTC-06:00) Ханга-Роа"
},
{
"code": "Pacific/Galapagos",
"name": "(UTC-06:00) Пуэрто Айора, Пуэрто-Бакерисо-Морено, Бальтра"
},
{
"code": "America/Atikokan",
"name": "(UTC-05:00) Кенора, Драйден, Ред-Лейк"
},
{
"code": "America/Bogota",
"name": "(UTC-05:00) Богота, Медельин, Кали"
},
{
"code": "America/Cancun",
"name": "(UTC-05:00) Канкун, Четумаль, Плайя-дель-Кармен"
},
{
"code": "America/Cayman",
"name": "(UTC-05:00) Джорджтаун, Кайман-Брак"
},
{
"code": "America/Chicago",
"name": "(UTC-05:00) Чикаго, Эль-Пасо, Нашвилл"
},
{
"code": "America/Guayaquil",
"name": "(UTC-05:00) Гуаякиль, Кито, Куэнка"
},
{
"code": "America/Indiana/Knox",
"name": "(UTC-05:00) Эвансвилл, Мичиган Сити, Вальпараисо"
},
{
"code": "America/Jamaica",
"name": "(UTC-05:00) Кингстон, Монтего-Бей, Мей Пен"
},
{
"code": "America/Lima",
"name": "(UTC-05:00) Лима, Панама, Трухильо"
},
{
"code": "America/Matamoros",
"name": "(UTC-05:00) Рейноса, Нуэво-Ларедо, Сьюдад-Акунья"
},
{
"code": "America/Menominee",
"name": "(UTC-05:00) Мемфис, Джексон, Кливленд"
},
{
"code": "America/North_Dakota/Center",
"name": "(UTC-05:00) Хьюстон, Сан-Антонио, Даллас"
},
{
"code": "America/Rio_Branco",
"name": "(UTC-05:00) Риу-Бранку, Табатинга"
},
{
"code": "America/Winnipeg",
"name": "(UTC-05:00) Виннипег, Брандон, Томпсон"
},
{
"code": "America/Anguilla",
"name": "(UTC-04:00) Валли"
},
{
"code": "America/Antigua",
"name": "(UTC-04:00) Сент-Джонс"
},
{
"code": "America/Aruba",
"name": "(UTC-04:00) Ораньестад, Ноорд, Пальм Бич"
},
{
"code": "America/Asuncion",
"name": "(UTC-04:00) Асунсьон, Сьюдад-дель-Эсте, Энкарнасьон"
},
{
"code": "America/Barbados",
"name": "(UTC-04:00) Бриджтаун"
},
{
"code": "America/Campo_Grande",
"name": "(UTC-04:00) Кампу-Гранди, Дорадус, Корумба"
},
{
"code": "America/Caracas",
"name": "(UTC-04:00) Каракас, Валенсия, Маракай"
},
{
"code": "America/Cuiaba",
"name": "(UTC-04:00) Куяба, Варзеа-Гранди, Рондонополис"
},
{
"code": "America/Curacao",
"name": "(UTC-04:00) Виллемстад, Филипсбург, Гран-Каса"
},
{
"code": "America/Detroit",
"name": "(UTC-04:00) Детройт, Гранд-Рапидс, Уоррен"
},
{
"code": "America/Dominica",
"name": "(UTC-04:00) Фор-де-Франс, Кастри, Грос Ислет"
},
{
"code": "America/Grand_Turk",
"name": "(UTC-04:00) Коберн-Таун"
},
{
"code": "America/Grenada",
"name": "(UTC-04:00) Сент-Джорджес"
},
{
"code": "America/Guadeloupe",
"name": "(UTC-04:00) Ле-Гозье, Пуант-а-Питр, Сент-Франсуа"
},
{
"code": "America/Guyana",
"name": "(UTC-04:00) Джорджтаун, Нью-Амстердам"
},
{
"code": "America/Havana",
"name": "(UTC-04:00) Гавана, Тринидад, Сантьяго-де-Куба"
},
{
"code": "America/Indiana/Marengo",
"name": "(UTC-04:00) Индианаполис, Кармел, Кокомо"
},
{
"code": "America/Indiana/Vevay",
"name": "(UTC-04:00) Форт-Уэйн, Терр Хот"
},
{
"code": "America/Indianapolis",
"name": "(UTC-04:00) Саут-Бенд, Блумингтон, Мунчи"
},
{
"code": "America/Iqaluit",
"name": "(UTC-04:00) Икалуит"
},
{
"code": "America/Kentucky/Monticello",
"name": "(UTC-04:00) Атланта"
},
{
"code": "America/Kralendijk",
"name": "(UTC-04:00) Кралендейк"
},
{
"code": "America/La_Paz",
"name": "(UTC-04:00) Санта-Крус-де-ла-Сьерра, Эль-Альто, Кочабамба"
},
{
"code": "America/Louisville",
"name": "(UTC-04:00) Колумбус, Луисвилл, Лексингтон"
},
{
"code": "America/Manaus",
"name": "(UTC-04:00) Манаус, Боа-Виста, Паринтинс"
},
{
"code": "America/Montreal",
"name": "(UTC-04:00) Квебек, Монреаль, Лаваль"
},
{
"code": "America/Montserrat",
"name": "(UTC-04:00) Плимут"
},
{
"code": "America/Nassau",
"name": "(UTC-04:00) Нассау, Фрипорт, Джордж Таун"
},
{
"code": "America/New_York",
"name": "(UTC-04:00) Нью-Йорк, Цицеро, Филадельфия"
},
{
"code": "America/Port-au-Prince",
"name": "(UTC-04:00) Порт-о-Пренс, Гонаив, Кап-Аитьен"
},
{
"code": "America/Port_of_Spain",
"name": "(UTC-04:00) Порт-оф-Спейн"
},
{
"code": "America/Porto_Velho",
"name": "(UTC-04:00) Порту-Велью, Жи-Парана, Вильена"
},
{
"code": "America/Puerto_Rico",
"name": "(UTC-04:00) Сан-Хуан, Каролина, Понсе"
},
{
"code": "America/Santiago",
"name": "(UTC-04:00) Сантьяго, Антофагаста, Винья-дель-Мар"
},
{
"code": "America/Santo_Domingo",
"name": "(UTC-04:00) Санто-Доминго, Сантьяго-де-лос-Кабальерос, Санто-Доминго-Есте"
},
{
"code": "America/St_Barthelemy",
"name": "(UTC-04:00) Густавия"
},
{
"code": "America/St_Kitts",
"name": "(UTC-04:00) Бастер"
},
{
"code": "America/St_Thomas",
"name": "(UTC-04:00) Шарлотта-Амалия"
},
{
"code": "America/St_Vincent",
"name": "(UTC-04:00) Кингстаун"
},
{
"code": "America/Thunder_Bay",
"name": "(UTC-04:00) Тандер-Бей"
},
{
"code": "America/Toronto",
"name": "(UTC-04:00) Торонто, Оттава, Миссиссага"
},
{
"code": "America/Tortola",
"name": "(UTC-04:00) Род-Таун, Кристианстед"
},
{
"code": "America/Argentina/Buenos_Aires",
"name": "(UTC-03:00) Буэнос-Айрес, Кордова, Росарио"
},
{
"code": "America/Belem",
"name": "(UTC-03:00) Белен, Ананиндеуа, Сантарен"
},
{
"code": "America/Cayenne",
"name": "(UTC-03:00) Парамарибо, Кайенна"
},
{
"code": "America/Fortaleza",
"name": "(UTC-03:00) Форталеза, Аракажу, Каукая"
},
{
"code": "America/Goose_Bay",
"name": "(UTC-03:00) Хеппи-Валли-Гуз-Бэй, Вабуш, Нейн"
},
{
"code": "America/Halifax",
"name": "(UTC-03:00) Галифакс, Сент-Джон, Дартмут"
},
{
"code": "America/Maceio",
"name": "(UTC-03:00) Салвадор, Масейо, Натал"
},
{
"code": "America/Montevideo",
"name": "(UTC-03:00) Монтевидео, Сальто, Пайсанду"
},
{
"code": "America/Recife",
"name": "(UTC-03:00) Ресифи, Терезина, Жабоатан-дус-Гуарарапес"
},
{
"code": "America/Santarem",
"name": "(UTC-03:00) Сан-Луис, Жуан-Песоа, Кампина-Гранди"
},
{
"code": "America/Sao_Paulo",
"name": "(UTC-03:00) Сан-Паулу, Рио-де-Жанейро, Бразилиа"
},
{
"code": "Atlantic/Bermuda",
"name": "(UTC-03:00) Сент-Джордж, Гамильтон"
},
{
"code": "America/St_Johns",
"name": "(UTC-02:30) Сент-Джонс, Корнер-Брук, Гандер"
},
{
"code": "America/Noronha",
"name": "(UTC-02:00) Фернанду-ди-Норонья"
},
{
"code": "Atlantic/South_Georgia",
"name": "(UTC-02:00) Грютвикен"
},
{
"code": "America/Godthab",
"name": "(UTC-01:00) Нуук, Какорток, Маниитсок"
},
{
"code": "Atlantic/Cape_Verde",
"name": "(UTC-01:00) Прая, Сан-Филип, Минделу"
},
{
"code": "Africa/Abidjan",
"name": "(UTC+00:00) Абиджан, Буаке, Корого"
},
{
"code": "Africa/Accra",
"name": "(UTC+00:00) Аккра, Кумаси, Тамале"
},
{
"code": "Africa/Bamako",
"name": "(UTC+00:00) Бамако, Уагадугу, Бобо-Диуласо"
},
{
"code": "Africa/Banjul",
"name": "(UTC+00:00) Банжул, Фарафенни"
},
{
"code": "Africa/Bissau",
"name": "(UTC+00:00) Бисау, Сан-Домингус, Бафата"
},
{
"code": "Africa/Conakry",
"name": "(UTC+00:00) Конакри, Канкан, Лабе"
},
{
"code": "Africa/Dakar",
"name": "(UTC+00:00) Дакар, Тиес, Мбур"
},
{
"code": "Africa/Freetown",
"name": "(UTC+00:00) Фритаун, Бо, Макени"
},
{
"code": "Africa/Lome",
"name": "(UTC+00:00) Ломе, Кара, Кпалиме"
},
{
"code": "Africa/Monrovia",
"name": "(UTC+00:00) Монровия"
},
{
"code": "Africa/Nouakchott",
"name": "(UTC+00:00) Нуакшот, Нуадибу, Росо"
},
{
"code": "Africa/Sao_Tome",
"name": "(UTC+00:00) Сан-Томе"
},
{
"code": "Atlantic/Azores",
"name": "(UTC+00:00) Орта"
},
{
"code": "Atlantic/Reykjavik",
"name": "(UTC+00:00) Рейкьявик, Вестманнаэйяр"
},
{
"code": "Africa/Algiers",
"name": "(UTC+01:00) Алжир, Оран, Константина"
},
{
"code": "Africa/Bangui",
"name": "(UTC+01:00) Банги, Бамбари, Нола"
},
{
"code": "Africa/Brazzaville",
"name": "(UTC+01:00) Браззавиль, Пуэнт-Нуар, Долизи"
},
{
"code": "Africa/Casablanca",
"name": "(UTC+01:00) Касабланка, Фес, Рабат"
},
{
"code": "Africa/Douala",
"name": "(UTC+01:00) Дуала, Яунде, Баменда"
},
{
"code": "Africa/El_Aaiun",
"name": "(UTC+01:00) Эль-Аюн, Бир-Лелу"
},
{
"code": "Africa/Kinshasa",
"name": "(UTC+01:00) Киншаса, Луанда, Мбужи-Майи"
},
{
"code": "Africa/Lagos",
"name": "(UTC+01:00) Лагос, Кано, Ибадан"
},
{
"code": "Africa/Libreville",
"name": "(UTC+01:00) Либревиль, Порт-Жантиль, Гамба"
},
{
"code": "Africa/Malabo",
"name": "(UTC+01:00) Бата, Малабо"
},
{
"code": "Africa/Ndjamena",
"name": "(UTC+01:00) Нджамена, Абеше, Файя-Ларжо"
},
{
"code": "Africa/Niamey",
"name": "(UTC+01:00) Ниамей, Зиндер, Тахуа"
},
{
"code": "Africa/Porto-Novo",
"name": "(UTC+01:00) Котону, Джугу, Порто-Ново"
},
{
"code": "Africa/Tunis",
"name": "(UTC+01:00) Тунис, Сфакс, Бизерта"
},
{
"code": "Atlantic/Canary",
"name": "(UTC+01:00) Лас-Пальмас-де-Гран-Канария, Санта-Крус-де-Тенерифе, Арона"
},
{
"code": "Atlantic/Faeroe",
"name": "(UTC+01:00) Киркьюбур"
},
{
"code": "Europe/Dublin",
"name": "(UTC+01:00) Дублин, Свордс, Дроэда"
},
{
"code": "Europe/Lisbon",
"name": "(UTC+01:00) Лиссабон, Вила-Нова-ди-Гая, Матозиньюш"
},
{
"code": "Europe/London",
"name": "(UTC+01:00) Лондон, Бирмингем, Лидс"
},
{
"code": "Africa/Bujumbura",
"name": "(UTC+02:00) Бужумбура"
},
{
"code": "Africa/Cairo",
"name": "(UTC+02:00) Каир, Александрия, Гиза"
},
{
"code": "Africa/Gaborone",
"name": "(UTC+02:00) Габороне, Франсистаун, Молепололе"
},
{
"code": "Africa/Harare",
"name": "(UTC+02:00) Булавайо, Хараре, Гверу"
},
{
"code": "Africa/Johannesburg",
"name": "(UTC+02:00) Йоханнесбург, Кейптаун, Претория"
},
{
"code": "Africa/Khartoum",
"name": "(UTC+02:00) Омдурман, Хартум, Ньяла"
},
{
"code": "Africa/Kigali",
"name": "(UTC+02:00) Кигали"
},
{
"code": "Africa/Lusaka",
"name": "(UTC+02:00) Лусака, Лилонгве, Блантайр"
},
{
"code": "Africa/Maputo",
"name": "(UTC+02:00) Мапуту, Матола, Нампула"
},
{
"code": "Africa/Maseru",
"name": "(UTC+02:00) Масеру"
},
{
"code": "Africa/Mbabane",
"name": "(UTC+02:00) Мбабане, Манзини"
},
{
"code": "Africa/Tripoli",
"name": "(UTC+02:00) Триполи, Бенгази, Адждабия"
},
{
"code": "Africa/Windhoek",
"name": "(UTC+02:00) Виндхук, Уолфиш-Бей, Рунду"
},
{
"code": "Europe/Amsterdam",
"name": "(UTC+02:00) Амстердам, Тилбург, Алмере"
},
{
"code": "Europe/Andorra",
"name": "(UTC+02:00) Андорра-ла-Велья, Сант-Жулиа-де-Лория, Энкам"
},
{
"code": "Europe/Belgrade",
"name": "(UTC+02:00) Белград, Подгорица, Лесковац"
},
{
"code": "Europe/Berlin",
"name": "(UTC+02:00) Берлин, Гамбург, Мюнхен"
},
{
"code": "Europe/Bratislava",
"name": "(UTC+02:00) Братислава, Липтовски-Микулаш, Кошице"
},
{
"code": "Europe/Brussels",
"name": "(UTC+02:00) Шарлеруа, Брюссель, Алст"
},
{
"code": "Europe/Budapest",
"name": "(UTC+02:00) Будапешт, Шопрон, Хайдусобосло"
},
{
"code": "Europe/Copenhagen",
"name": "(UTC+02:00) Копенгаген, Эсбьерг, Раннерс"
},
{
"code": "Europe/Gibraltar",
"name": "(UTC+02:00) Гибралтар"
},
{
"code": "Europe/Kaliningrad",
"name": "(UTC+02:00) Калининград, Советск, Черняховск"
},
{
"code": "Europe/Ljubljana",
"name": "(UTC+02:00) Любляна, Марибор, Крань"
},
{
"code": "Europe/Luxembourg",
"name": "(UTC+02:00) Люксембург, Дикирх, Гревенмахер"
},
{
"code": "Europe/Madrid",
"name": "(UTC+02:00) Мадрид, Барселона, Валенсия"
},
{
"code": "Europe/Malta",
"name": "(UTC+02:00) Сент-Полс-Бэй, Меллиеха, Валлетта"
},
{
"code": "Europe/Monaco",
"name": "(UTC+02:00) Монако, Монте-Карло"
},
{
"code": "Europe/Oslo",
"name": "(UTC+02:00) Осло, Саннес, Олесунн"
},
{
"code": "Europe/Paris",
"name": "(UTC+02:00) Париж, Марсель, Лион"
},
{
"code": "Europe/Prague",
"name": "(UTC+02:00) Прага, Йиглава, Байё"
},
{
"code": "Europe/Rome",
"name": "(UTC+02:00) Рим, Милан, Неаполь"
},
{
"code": "Europe/San_Marino",
"name": "(UTC+02:00) Сан-Марино, Аккуавива"
},
{
"code": "Europe/Sarajevo",
"name": "(UTC+02:00) Сараево, Ливно"
},
{
"code": "Europe/Skopje",
"name": "(UTC+02:00) Скопье, Зеница, Мостар"
},
{
"code": "Europe/Stockholm",
"name": "(UTC+02:00) Стокгольм, Лунд, Бурос"
},
{
"code": "Europe/Tirane",
"name": "(UTC+02:00) Тирана, Саранда, Химара"
},
{
"code": "Europe/Vaduz",
"name": "(UTC+02:00) Вадуц, Гамприн"
},
{
"code": "Europe/Vatican",
"name": "(UTC+02:00) Ватикан"
},
{
"code": "Europe/Vienna",
"name": "(UTC+02:00) Вена, Вельс, Винер-Нойштадт"
},
{
"code": "Europe/Warsaw",
"name": "(UTC+02:00) Варшава, Лодзь, Краков"
},
{
"code": "Europe/Zagreb",
"name": "(UTC+02:00) Загреб, Риека, Винковцы"
},
{
"code": "Europe/Zurich",
"name": "(UTC+02:00) Берн, Винтертур, Тун"
},
{
"code": "Africa/Addis_Ababa",
"name": "(UTC+03:00) Аддис-Абеба, Дыре-Дауа, Адама"
},
{
"code": "Africa/Asmera",
"name": "(UTC+03:00) Асмэра, Массауа"
},
{
"code": "Africa/Dar_es_Salaam",
"name": "(UTC+03:00) Дар-эс-Салам, Мванза, Аруша"
},
{
"code": "Africa/Djibouti",
"name": "(UTC+03:00) Джибути"
},
{
"code": "Africa/Kampala",
"name": "(UTC+03:00) Кампала, Джинджа, Энтеббе"
},
{
"code": "Africa/Mogadishu",
"name": "(UTC+03:00) Могадишо, Харгейса, Бербера"
},
{
"code": "Africa/Nairobi",
"name": "(UTC+03:00) Найроби, Момбаса, Кисуму"
},
{
"code": "Asia/Aden",
"name": "(UTC+03:00) Сана, Эль-Бейда, Амран"
},
{
"code": "Asia/Amman",
"name": "(UTC+03:00) Амман, Маан, Акаба"
},
{
"code": "Asia/Baghdad",
"name": "(UTC+03:00) Багдад, Басра, Мосул"
},
{
"code": "Asia/Bahrain",
"name": "(UTC+03:00) Доха, Манама"
},
{
"code": "Asia/Beirut",
"name": "(UTC+03:00) Бейрут, Эн-Набатия, Захле"
},
{
"code": "Asia/Damascus",
"name": "(UTC+03:00) Алеппо, Дамаск, Эль-Хасака"
},
{
"code": "Asia/Gaza",
"name": "(UTC+03:00) Рамалла, Газа"
},
{
"code": "Asia/Jerusalem",
"name": "(UTC+03:00) Иерусалим, Тель-Авив, Хайфа"
},
{
"code": "Asia/Kuwait",
"name": "(UTC+03:00) Эль-Кувейт"
},
{
"code": "Asia/Nicosia",
"name": "(UTC+03:00) Никосия, Паралимни, Лапитос"
},
{
"code": "Asia/Riyadh",
"name": "(UTC+03:00) Эр-Рияд, Джидда, Мекка"
},
{
"code": "Europe/Athens",
"name": "(UTC+03:00) Афины, Пирей, Волос"
},
{
"code": "Europe/Bucharest",
"name": "(UTC+03:00) Бухарест, Дорохой, Гура-Гуморулуй"
},
{
"code": "Europe/Helsinki",
"name": "(UTC+03:00) Хельсинки, Эспоо, Вантаа"
},
{
"code": "Europe/Istanbul",
"name": "(UTC+03:00) Стамбул, Анкара, Измир"
},
{
"code": "Europe/Kyiv",
"name": "(UTC+03:00) Киев, Харьков, Днепр"
},
{
"code": "Europe/Minsk",
"name": "(UTC+03:00) Минск, Гомель, Витебск"
},
{
"code": "Europe/Moscow",
"name": "(UTC+03:00) Москва, Санкт-Петербург, Казань"
},
{
"code": "Europe/Riga",
"name": "(UTC+03:00) Рига, Даугавпилс, Лиепая"
},
{
"code": "Europe/Sofia",
"name": "(UTC+03:00) София, Варна, Тырговиште"
},
{
"code": "Europe/Tallinn",
"name": "(UTC+03:00) Таллин, Тарту, Нарва"
},
{
"code": "Europe/Vilnius",
"name": "(UTC+03:00) Вильнюс, Каунас, Клайпеда"
},
{
"code": "Europe/Volgograd",
"name": "(UTC+03:00) Волгоград, Волжский, Камышин"
},
{
"code": "Indian/Antananarivo",
"name": "(UTC+03:00) Антананариву, Туамасина, Анцирабе"
},
{
"code": "Indian/Comoro",
"name": "(UTC+03:00) Морони"
},
{
"code": "Asia/Tehran",
"name": "(UTC+03:30) Тегеран, Мешхед, Исфахан"
},
{
"code": "Asia/Baku",
"name": "(UTC+04:00) Баку, Сумгаит, Гянджа"
},
{
"code": "Asia/Dubai",
"name": "(UTC+04:00) Дубай, Абу-Даби, Шарджа"
},
{
"code": "Asia/Muscat",
"name": "(UTC+04:00) Маскат, Эс-Сиб, Баушар"
},
{
"code": "Asia/Tbilisi",
"name": "(UTC+04:00) Тбилиси, Батуми, Кутаиси"
},
{
"code": "Asia/Yerevan",
"name": "(UTC+04:00) Ереван, Гюмри, Ванадзор"
},
{
"code": "Europe/Astrakhan",
"name": "(UTC+04:00) Астрахань, Ахтубинск, Знаменск"
},
{
"code": "Europe/Samara",
"name": "(UTC+04:00) Самара, Тольятти, Ижевск"
},
{
"code": "Europe/Saratov",
"name": "(UTC+04:00) Саратов, Энгельс, Балаково"
},
{
"code": "Europe/Ulyanovsk",
"name": "(UTC+04:00) Ульяновск, Димитровград, Инза"
},
{
"code": "Indian/Mauritius",
"name": "(UTC+04:00) Порт-Луи, Вакоа-Феникс, Виктория"
},
{
"code": "Indian/Reunion",
"name": "(UTC+04:00) Сен-Дени, Сен-Пьер, Силао"
},
{
"code": "Asia/Kabul",
"name": "(UTC+04:30) Кабул, Кандагар, Герат"
},
{
"code": "Asia/Almaty",
"name": "(UTC+05:00) Алматы, Астана, Шымкент"
},
{
"code": "Asia/Aqtau",
"name": "(UTC+05:00) Актау"
},
{
"code": "Asia/Aqtobe",
"name": "(UTC+05:00) Актобе, Уральск, Атырау"
},
{
"code": "Asia/Ashgabat",
"name": "(UTC+05:00) Ашхабад, Туркменабад, Дашогуз"
},
{
"code": "Asia/Dushanbe",
"name": "(UTC+05:00) Душанбе, Худжанд, Куляб"
},
{
"code": "Asia/Karachi",
"name": "(UTC+05:00) Карачи, Лахор, Фейсалабад"
},
{
"code": "Asia/Qyzylorda",
"name": "(UTC+05:00) Кызылорда, Байконур, Аральск"
},
{
"code": "Asia/Tashkent",
"name": "(UTC+05:00) Ташкент, Наманган, Самарканд"
},
{
"code": "Asia/Yekaterinburg",
"name": "(UTC+05:00) Екатеринбург, Челябинск, Уфа"
},
{
"code": "Indian/Maldives",
"name": "(UTC+05:00) Мале, Адду, Фувахмулах"
},
{
"code": "Asia/Colombo",
"name": "(UTC+05:30) Полоннарува, Дехивала-Маунт-Лавиния, Негомбо"
},
{
"code": "Asia/Kolkata",
"name": "(UTC+05:30) Мумбаи, Дели, Бангалор"
},
{
"code": "Asia/Kathmandu",
"name": "(UTC+05:45) Катманду, Покхара, Бхаратпур"
},
{
"code": "Asia/Bishkek",
"name": "(UTC+06:00) Бишкек, Ош, Джалал-Абад"
},
{
"code": "Asia/Dhaka",
"name": "(UTC+06:00) Дакка, Читтагонг, Нараянгандж"
},
{
"code": "Asia/Omsk",
"name": "(UTC+06:00) Омск, Тара, Калачинск"
},
{
"code": "Asia/Thimphu",
"name": "(UTC+06:00) Тхимпху"
},
{
"code": "Asia/Rangoon",
"name": "(UTC+06:30) Янгон, Мандалай, Нейпьидо"
},
{
"code": "Indian/Cocos",
"name": "(UTC+06:30) Уэст-Айленд"
},
{
"code": "Asia/Bangkok",
"name": "(UTC+07:00) Бангкок, Самутпракан, Самутсонгкхрам"
},
{
"code": "Asia/Barnaul",
"name": "(UTC+07:00) Барнаул, Бийск, Рубцовск"
},
{
"code": "Asia/Hovd",
"name": "(UTC+07:00) Улаангом"
},
{
"code": "Asia/Jakarta",
"name": "(UTC+07:00) Джакарта, Сурабая, Бандунг"
},
{
"code": "Asia/Krasnoyarsk",
"name": "(UTC+07:00) Красноярск, Абакан, Норильск"
},
{
"code": "Asia/Novokuznetsk",
"name": "(UTC+07:00) Кемерово, Новокузнецк, Прокопьевск"
},
{
"code": "Asia/Novosibirsk",
"name": "(UTC+07:00) Новосибирск, Бердск, Искитим"
},
{
"code": "Asia/Phnom_Penh",
"name": "(UTC+07:00) Пномпень, Баттамбанг, Сиануквиль"
},
{
"code": "Asia/Tomsk",
"name": "(UTC+07:00) Томск, Северск, Стрежевой"
},
{
"code": "Asia/Vientiane",
"name": "(UTC+07:00) Хошимин, Ханой, Хайфон"
},
{
"code": "Asia/Brunei",
"name": "(UTC+08:00) Бандар-Сери-Бегаван, Куала-Белаит"
},
{
"code": "Asia/Harbin",
"name": "(UTC+08:00) Харбин"
},
{
"code": "Asia/Irkutsk",
"name": "(UTC+08:00) Иркутск, Улан-Удэ, Братск"
},
{
"code": "Asia/Kuala_Lumpur",
"name": "(UTC+08:00) Куала-Лумпур, Ипох, Шах-Алам"
},
{
"code": "Asia/Macau",
"name": "(UTC+08:00) Макао (Аомынь)"
},
{
"code": "Asia/Makassar",
"name": "(UTC+08:00) Макасар, Сукавати, Танджунгселор"
},
{
"code": "Asia/Manila",
"name": "(UTC+08:00) Кесон-Сити, Давао, Манила"
},
{
"code": "Asia/Shanghai",
"name": "(UTC+08:00) Чунцин, Шанхай, Пекин"
},
{
"code": "Asia/Singapore",
"name": "(UTC+08:00) Сингапур"
},
{
"code": "Asia/Taipei",
"name": "(UTC+08:00) Нанкин"
},
{
"code": "Asia/Ulaanbaatar",
"name": "(UTC+08:00) Улан-Батор, Сайншанд, Арвайхээр"
},
{
"code": "Australia/Perth",
"name": "(UTC+08:00) Перт, Рокингем, Банбери"
},
{
"code": "Asia/Chita",
"name": "(UTC+09:00) Чита, Краснокаменск, Борзя"
},
{
"code": "Asia/Dili",
"name": "(UTC+09:00) Дили"
},
{
"code": "Asia/Jayapura",
"name": "(UTC+09:00) Мерауке"
},
{
"code": "Asia/Pyongyang",
"name": "(UTC+09:00) Пхеньян, Чхонджин"
},
{
"code": "Asia/Seoul",
"name": "(UTC+09:00) Сеул, Пусан, Инчхон"
},
{
"code": "Asia/Tokyo",
"name": "(UTC+09:00) Токио, Йокогама, Осака"
},
{
"code": "Asia/Yakutsk",
"name": "(UTC+09:00) Якутск, Благовещенск, Белогорск"
},
{
"code": "Pacific/Palau",
"name": "(UTC+09:00) Корор, Нгерулмуд"
},
{
"code": "Australia/Adelaide",
"name": "(UTC+09:30) Аделаида, Маунт-Гамбир, Уайалла"
},
{
"code": "Australia/Broken_Hill",
"name": "(UTC+09:30) Брокен Хилл"
},
{
"code": "Australia/Darwin",
"name": "(UTC+09:30) Дарвин, Алис-Спрингс, Кэтрин"
},
{
"code": "Asia/Vladivostok",
"name": "(UTC+10:00) Хабаровск, Владивосток, Комсомольск-на-Амуре"
},
{
"code": "Australia/Brisbane",
"name": "(UTC+10:00) Брисбен, Голд-Кост, Саншайн-Кост"
},
{
"code": "Australia/Hobart",
"name": "(UTC+10:00) Хобарт, Лонсестон, Девонпорт"
},
{
"code": "Australia/Melbourne",
"name": "(UTC+10:00) Мельбурн, Джелонг, Балларат"
},
{
"code": "Australia/Sydney",
"name": "(UTC+10:00) Сидней, Канберра, Вуллонгонг"
},
{
"code": "Pacific/Guam",
"name": "(UTC+10:00) Хагатна"
},
{
"code": "Pacific/Port_Moresby",
"name": "(UTC+10:00) Порт-Морсби, Лаэ, Маунт-Хаген"
},
{
"code": "Pacific/Yap",
"name": "(UTC+10:00) Вено, Колониа, Паликир"
},
{
"code": "Asia/Magadan",
"name": "(UTC+11:00) Магадан, Сусуман"
},
{
"code": "Asia/Sakhalin",
"name": "(UTC+11:00) Южно-Сахалинск, Корсаков, Холмск"
},
{
"code": "Asia/Srednekolymsk",
"name": "(UTC+11:00) Среднеколымск, Северо-Курильск"
},
{
"code": "Pacific/Efate",
"name": "(UTC+11:00) Хониара, Порт-Вила, Сола"
},
{
"code": "Pacific/Norfolk",
"name": "(UTC+11:00) Кингстон"
},
{
"code": "Pacific/Noumea",
"name": "(UTC+11:00) Нумеа, Кумак, Ве"
},
{
"code": "Asia/Kamchatka",
"name": "(UTC+12:00) Петропавловск-Камчатский, Елизово, Вилючинск"
},
{
"code": "Pacific/Auckland",
"name": "(UTC+12:00) Окленд, Веллингтон, Крайстчерч"
},
{
"code": "Pacific/Fiji",
"name": "(UTC+12:00) Сува, Нанди, Лабаса"
},
{
"code": "Pacific/Funafuti",
"name": "(UTC+12:00) Фунафути"
},
{
"code": "Pacific/Majuro",
"name": "(UTC+12:00) Маджуро"
},
{
"code": "Pacific/Nauru",
"name": "(UTC+12:00) Ярен"
},
{
"code": "Pacific/Tarawa",
"name": "(UTC+12:00) Южная Тарава, Байрики"
},
{
"code": "Pacific/Apia",
"name": "(UTC+13:00) Апиа"
},
{
"code": "Pacific/Fakaofo",
"name": "(UTC+13:00) Атафу, Факаофо, Нукунону"
},
{
"code": "Pacific/Tongatapu",
"name": "(UTC+13:00) Нукуалофа, Нейафу, Пангаи"
}
]
Description
Сейчас в экосистеме gravity-ui нет единого формата таймзон, из-за чего каждая команда реализует выбор и отображение по-своему (и на клиенте, и на backend). Это приводит к расхождениям, особенно с учётом DST и локализации.
Также это вопрос бренда gravity-ui, стандартного восприятия выбора таймзоны пользователями сайтов/web-приложений на gravity-ui.
Windows:
Профиль яндекс:
Предлагаю использовать стандартный объект:
Ключевые принципы:
Пример получения offset:
Используем полифил для поддержки для старых браузеров, Intl.DisplayNames, на всякий случай:
Я в своей реализации UI использую компонент Select c filterable true.
Сразу возвращать json типовой не представляется возможным, так как он не будет учитывать локализацию и «летнее время».
Вот такой json например, генерируется в яндекс профиле, посмотрев на него ты видишь стандартизированную и понятную структуру.
Suggested solution
Alternative
No response
Additional context
No response
Validations