fix: timezone options

This commit is contained in:
Sérgio Salgado 2021-11-23 17:38:08 +00:00
parent 973040f409
commit b0a031bd97
3 changed files with 128 additions and 20 deletions

View file

@ -0,0 +1,120 @@
import { intervalToDuration } from 'date-fns'
import { getTimezoneOffset } from 'date-fns-tz'
import * as R from 'ramda'
const timezones = {
'Pacific/Midway': 'Midway Island, Samoa',
'Pacific/Honolulu': 'Hawaii',
'America/Juneau': 'Alaska',
'America/Boise': 'Mountain Time',
'America/Dawson': 'Dawson, Yukon',
'America/Chihuahua': 'Chihuahua, La Paz, Mazatlan',
'America/Phoenix': 'Arizona',
'America/Chicago': 'Central Time',
'America/Regina': 'Saskatchewan',
'America/Mexico_City': 'Guadalajara, Mexico City, Monterrey',
'America/Belize': 'Central America',
'America/Detroit': 'Eastern Time',
'America/Bogota': 'Bogota, Lima, Quito',
'America/Caracas': 'Caracas, La Paz',
'America/Santiago': 'Santiago',
'America/St_Johns': 'Newfoundland and Labrador',
'America/Sao_Paulo': 'Brasilia',
'America/Tijuana': 'Tijuana',
'America/Montevideo': 'Montevideo',
'America/Argentina/Buenos_Aires': 'Buenos Aires, Georgetown',
'America/Godthab': 'Greenland',
'America/Los_Angeles': 'Pacific Time',
'Atlantic/Azores': 'Azores',
'Atlantic/Cape_Verde': 'Cape Verde Islands',
GMT: 'UTC',
'Europe/London': 'Edinburgh, London',
'Europe/Dublin': 'Dublin',
'Europe/Lisbon': 'Lisbon',
'Africa/Casablanca': 'Casablanca, Monrovia',
'Atlantic/Canary': 'Canary Islands',
'Europe/Belgrade': 'Belgrade, Bratislava, Budapest, Ljubljana, Prague',
'Europe/Sarajevo': 'Sarajevo, Skopje, Warsaw, Zagreb',
'Europe/Brussels': 'Brussels, Copenhagen, Madrid, Paris',
'Europe/Amsterdam': 'Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna',
'Africa/Algiers': 'West Central Africa',
'Europe/Bucharest': 'Bucharest',
'Africa/Cairo': 'Cairo',
'Europe/Helsinki': 'Helsinki, Kiev, Riga, Sofia, Tallinn, Vilnius',
'Europe/Athens': 'Athens, Istanbul, Minsk',
'Asia/Jerusalem': 'Jerusalem',
'Africa/Harare': 'Harare, Pretoria',
'Europe/Moscow': 'Moscow, St. Petersburg, Volgograd',
'Asia/Kuwait': 'Kuwait, Riyadh',
'Africa/Nairobi': 'Nairobi',
'Asia/Baghdad': 'Baghdad',
'Asia/Tehran': 'Tehran',
'Asia/Dubai': 'Abu Dhabi, Muscat',
'Asia/Baku': 'Baku, Tbilisi, Yerevan',
'Asia/Kabul': 'Kabul',
'Asia/Yekaterinburg': 'Ekaterinburg',
'Asia/Karachi': 'Islamabad, Karachi, Tashkent',
'Asia/Kolkata': 'Chennai, Kolkata, Mumbai, New Delhi',
'Asia/Kathmandu': 'Kathmandu',
'Asia/Dhaka': 'Astana, Dhaka',
'Asia/Colombo': 'Sri Jayawardenepura',
'Asia/Almaty': 'Almaty, Novosibirsk',
'Asia/Rangoon': 'Yangon Rangoon',
'Asia/Bangkok': 'Bangkok, Hanoi, Jakarta',
'Asia/Krasnoyarsk': 'Krasnoyarsk',
'Asia/Shanghai': 'Beijing, Chongqing, Hong Kong SAR, Urumqi',
'Asia/Kuala_Lumpur': 'Kuala Lumpur, Singapore',
'Asia/Taipei': 'Taipei',
'Australia/Perth': 'Perth',
'Asia/Irkutsk': 'Irkutsk, Ulaanbaatar',
'Asia/Seoul': 'Seoul',
'Asia/Tokyo': 'Osaka, Sapporo, Tokyo',
'Asia/Yakutsk': 'Yakutsk',
'Australia/Darwin': 'Darwin',
'Australia/Adelaide': 'Adelaide',
'Australia/Sydney': 'Canberra, Melbourne, Sydney',
'Australia/Brisbane': 'Brisbane',
'Australia/Hobart': 'Hobart',
'Asia/Vladivostok': 'Vladivostok',
'Pacific/Guam': 'Guam, Port Moresby',
'Asia/Magadan': 'Magadan, Solomon Islands, New Caledonia',
'Asia/Kamchatka': 'Kamchatka, Marshall Islands',
'Pacific/Fiji': 'Fiji Islands',
'Pacific/Auckland': 'Auckland, Wellington',
'Pacific/Tongatapu': "Nuku'alofa"
}
const buildTzLabels = timezoneList => {
const pairs = R.toPairs(timezoneList)
return R.reduce(
(acc, value) => {
const isNegative = getTimezoneOffset(value[0]) < 0
const duration = intervalToDuration({
start: 0,
end: Math.abs(getTimezoneOffset(value[0]))
})
const hours = duration.hours.toLocaleString('en-US', {
minimumIntegerDigits: 2,
useGrouping: false
})
const minutes = duration.minutes.toLocaleString('en-US', {
minimumIntegerDigits: 2,
useGrouping: false
})
const prefix = `(GMT${isNegative ? `-` : `+`}${hours}:${minutes})`
acc.push({
label: `${prefix} - ${value[1]}`,
code: value[0]
})
return acc
},
[],
pairs
)
}
export default buildTzLabels(timezones)