LouisLam
4 years ago
9 changed files with 441 additions and 384 deletions
@ -0,0 +1,397 @@ |
|||
import dayjs from "dayjs"; |
|||
import utc from 'dayjs/plugin/utc' |
|||
import timezone from 'dayjs/plugin/timezone' |
|||
|
|||
dayjs.extend(utc) |
|||
dayjs.extend(timezone) |
|||
|
|||
|
|||
function getTimezoneOffset(timeZone) { |
|||
const now = new Date(); |
|||
const tzString = now.toLocaleString('en-US', { timeZone }); |
|||
const localString = now.toLocaleString('en-US'); |
|||
const diff = (Date.parse(localString) - Date.parse(tzString)) / 3600000; |
|||
const offset = diff + now.getTimezoneOffset() / 60; |
|||
return -offset; |
|||
} |
|||
|
|||
// From: https://stackoverflow.com/questions/38399465/how-to-get-list-of-all-timezones-in-javascript
|
|||
const aryIannaTimeZones = [ |
|||
'Europe/Andorra', |
|||
'Asia/Dubai', |
|||
'Asia/Kabul', |
|||
'Europe/Tirane', |
|||
'Asia/Yerevan', |
|||
'Antarctica/Casey', |
|||
'Antarctica/Davis', |
|||
'Antarctica/DumontDUrville', // https://bugs.chromium.org/p/chromium/issues/detail?id=928068
|
|||
'Antarctica/Mawson', |
|||
'Antarctica/Palmer', |
|||
'Antarctica/Rothera', |
|||
'Antarctica/Syowa', |
|||
'Antarctica/Troll', |
|||
'Antarctica/Vostok', |
|||
'America/Argentina/Buenos_Aires', |
|||
'America/Argentina/Cordoba', |
|||
'America/Argentina/Salta', |
|||
'America/Argentina/Jujuy', |
|||
'America/Argentina/Tucuman', |
|||
'America/Argentina/Catamarca', |
|||
'America/Argentina/La_Rioja', |
|||
'America/Argentina/San_Juan', |
|||
'America/Argentina/Mendoza', |
|||
'America/Argentina/San_Luis', |
|||
'America/Argentina/Rio_Gallegos', |
|||
'America/Argentina/Ushuaia', |
|||
'Pacific/Pago_Pago', |
|||
'Europe/Vienna', |
|||
'Australia/Lord_Howe', |
|||
'Antarctica/Macquarie', |
|||
'Australia/Hobart', |
|||
'Australia/Currie', |
|||
'Australia/Melbourne', |
|||
'Australia/Sydney', |
|||
'Australia/Broken_Hill', |
|||
'Australia/Brisbane', |
|||
'Australia/Lindeman', |
|||
'Australia/Adelaide', |
|||
'Australia/Darwin', |
|||
'Australia/Perth', |
|||
'Australia/Eucla', |
|||
'Asia/Baku', |
|||
'America/Barbados', |
|||
'Asia/Dhaka', |
|||
'Europe/Brussels', |
|||
'Europe/Sofia', |
|||
'Atlantic/Bermuda', |
|||
'Asia/Brunei', |
|||
'America/La_Paz', |
|||
'America/Noronha', |
|||
'America/Belem', |
|||
'America/Fortaleza', |
|||
'America/Recife', |
|||
'America/Araguaina', |
|||
'America/Maceio', |
|||
'America/Bahia', |
|||
'America/Sao_Paulo', |
|||
'America/Campo_Grande', |
|||
'America/Cuiaba', |
|||
'America/Santarem', |
|||
'America/Porto_Velho', |
|||
'America/Boa_Vista', |
|||
'America/Manaus', |
|||
'America/Eirunepe', |
|||
'America/Rio_Branco', |
|||
'America/Nassau', |
|||
'Asia/Thimphu', |
|||
'Europe/Minsk', |
|||
'America/Belize', |
|||
'America/St_Johns', |
|||
'America/Halifax', |
|||
'America/Glace_Bay', |
|||
'America/Moncton', |
|||
'America/Goose_Bay', |
|||
'America/Blanc-Sablon', |
|||
'America/Toronto', |
|||
'America/Nipigon', |
|||
'America/Thunder_Bay', |
|||
'America/Iqaluit', |
|||
'America/Pangnirtung', |
|||
'America/Atikokan', |
|||
'America/Winnipeg', |
|||
'America/Rainy_River', |
|||
'America/Resolute', |
|||
'America/Rankin_Inlet', |
|||
'America/Regina', |
|||
'America/Swift_Current', |
|||
'America/Edmonton', |
|||
'America/Cambridge_Bay', |
|||
'America/Yellowknife', |
|||
'America/Inuvik', |
|||
'America/Creston', |
|||
'America/Dawson_Creek', |
|||
'America/Fort_Nelson', |
|||
'America/Vancouver', |
|||
'America/Whitehorse', |
|||
'America/Dawson', |
|||
'Indian/Cocos', |
|||
'Europe/Zurich', |
|||
'Africa/Abidjan', |
|||
'Pacific/Rarotonga', |
|||
'America/Santiago', |
|||
'America/Punta_Arenas', |
|||
'Pacific/Easter', |
|||
'Asia/Shanghai', |
|||
'Asia/Urumqi', |
|||
'America/Bogota', |
|||
'America/Costa_Rica', |
|||
'America/Havana', |
|||
'Atlantic/Cape_Verde', |
|||
'America/Curacao', |
|||
'Indian/Christmas', |
|||
'Asia/Nicosia', |
|||
'Asia/Famagusta', |
|||
'Europe/Prague', |
|||
'Europe/Berlin', |
|||
'Europe/Copenhagen', |
|||
'America/Santo_Domingo', |
|||
'Africa/Algiers', |
|||
'America/Guayaquil', |
|||
'Pacific/Galapagos', |
|||
'Europe/Tallinn', |
|||
'Africa/Cairo', |
|||
'Africa/El_Aaiun', |
|||
'Europe/Madrid', |
|||
'Africa/Ceuta', |
|||
'Atlantic/Canary', |
|||
'Europe/Helsinki', |
|||
'Pacific/Fiji', |
|||
'Atlantic/Stanley', |
|||
'Pacific/Chuuk', |
|||
'Pacific/Pohnpei', |
|||
'Pacific/Kosrae', |
|||
'Atlantic/Faroe', |
|||
'Europe/Paris', |
|||
'Europe/London', |
|||
'Asia/Tbilisi', |
|||
'America/Cayenne', |
|||
'Africa/Accra', |
|||
'Europe/Gibraltar', |
|||
'America/Godthab', |
|||
'America/Danmarkshavn', |
|||
'America/Scoresbysund', |
|||
'America/Thule', |
|||
'Europe/Athens', |
|||
'Atlantic/South_Georgia', |
|||
'America/Guatemala', |
|||
'Pacific/Guam', |
|||
'Africa/Bissau', |
|||
'America/Guyana', |
|||
'Asia/Hong_Kong', |
|||
'America/Tegucigalpa', |
|||
'America/Port-au-Prince', |
|||
'Europe/Budapest', |
|||
'Asia/Jakarta', |
|||
'Asia/Pontianak', |
|||
'Asia/Makassar', |
|||
'Asia/Jayapura', |
|||
'Europe/Dublin', |
|||
'Asia/Jerusalem', |
|||
'Asia/Kolkata', |
|||
'Indian/Chagos', |
|||
'Asia/Baghdad', |
|||
'Asia/Tehran', |
|||
'Atlantic/Reykjavik', |
|||
'Europe/Rome', |
|||
'America/Jamaica', |
|||
'Asia/Amman', |
|||
'Asia/Tokyo', |
|||
'Africa/Nairobi', |
|||
'Asia/Bishkek', |
|||
'Pacific/Tarawa', |
|||
'Pacific/Enderbury', |
|||
'Pacific/Kiritimati', |
|||
'Asia/Pyongyang', |
|||
'Asia/Seoul', |
|||
'Asia/Almaty', |
|||
'Asia/Qyzylorda', |
|||
'Asia/Qostanay', // https://bugs.chromium.org/p/chromium/issues/detail?id=928068
|
|||
'Asia/Aqtobe', |
|||
'Asia/Aqtau', |
|||
'Asia/Atyrau', |
|||
'Asia/Oral', |
|||
'Asia/Beirut', |
|||
'Asia/Colombo', |
|||
'Africa/Monrovia', |
|||
'Europe/Vilnius', |
|||
'Europe/Luxembourg', |
|||
'Europe/Riga', |
|||
'Africa/Tripoli', |
|||
'Africa/Casablanca', |
|||
'Europe/Monaco', |
|||
'Europe/Chisinau', |
|||
'Pacific/Majuro', |
|||
'Pacific/Kwajalein', |
|||
'Asia/Yangon', |
|||
'Asia/Ulaanbaatar', |
|||
'Asia/Hovd', |
|||
'Asia/Choibalsan', |
|||
'Asia/Macau', |
|||
'America/Martinique', |
|||
'Europe/Malta', |
|||
'Indian/Mauritius', |
|||
'Indian/Maldives', |
|||
'America/Mexico_City', |
|||
'America/Cancun', |
|||
'America/Merida', |
|||
'America/Monterrey', |
|||
'America/Matamoros', |
|||
'America/Mazatlan', |
|||
'America/Chihuahua', |
|||
'America/Ojinaga', |
|||
'America/Hermosillo', |
|||
'America/Tijuana', |
|||
'America/Bahia_Banderas', |
|||
'Asia/Kuala_Lumpur', |
|||
'Asia/Kuching', |
|||
'Africa/Maputo', |
|||
'Africa/Windhoek', |
|||
'Pacific/Noumea', |
|||
'Pacific/Norfolk', |
|||
'Africa/Lagos', |
|||
'America/Managua', |
|||
'Europe/Amsterdam', |
|||
'Europe/Oslo', |
|||
'Asia/Kathmandu', |
|||
'Pacific/Nauru', |
|||
'Pacific/Niue', |
|||
'Pacific/Auckland', |
|||
'Pacific/Chatham', |
|||
'America/Panama', |
|||
'America/Lima', |
|||
'Pacific/Tahiti', |
|||
'Pacific/Marquesas', |
|||
'Pacific/Gambier', |
|||
'Pacific/Port_Moresby', |
|||
'Pacific/Bougainville', |
|||
'Asia/Manila', |
|||
'Asia/Karachi', |
|||
'Europe/Warsaw', |
|||
'America/Miquelon', |
|||
'Pacific/Pitcairn', |
|||
'America/Puerto_Rico', |
|||
'Asia/Gaza', |
|||
'Asia/Hebron', |
|||
'Europe/Lisbon', |
|||
'Atlantic/Madeira', |
|||
'Atlantic/Azores', |
|||
'Pacific/Palau', |
|||
'America/Asuncion', |
|||
'Asia/Qatar', |
|||
'Indian/Reunion', |
|||
'Europe/Bucharest', |
|||
'Europe/Belgrade', |
|||
'Europe/Kaliningrad', |
|||
'Europe/Moscow', |
|||
'Europe/Simferopol', |
|||
'Europe/Kirov', |
|||
'Europe/Astrakhan', |
|||
'Europe/Volgograd', |
|||
'Europe/Saratov', |
|||
'Europe/Ulyanovsk', |
|||
'Europe/Samara', |
|||
'Asia/Yekaterinburg', |
|||
'Asia/Omsk', |
|||
'Asia/Novosibirsk', |
|||
'Asia/Barnaul', |
|||
'Asia/Tomsk', |
|||
'Asia/Novokuznetsk', |
|||
'Asia/Krasnoyarsk', |
|||
'Asia/Irkutsk', |
|||
'Asia/Chita', |
|||
'Asia/Yakutsk', |
|||
'Asia/Khandyga', |
|||
'Asia/Vladivostok', |
|||
'Asia/Ust-Nera', |
|||
'Asia/Magadan', |
|||
'Asia/Sakhalin', |
|||
'Asia/Srednekolymsk', |
|||
'Asia/Kamchatka', |
|||
'Asia/Anadyr', |
|||
'Asia/Riyadh', |
|||
'Pacific/Guadalcanal', |
|||
'Indian/Mahe', |
|||
'Africa/Khartoum', |
|||
'Europe/Stockholm', |
|||
'Asia/Singapore', |
|||
'America/Paramaribo', |
|||
'Africa/Juba', |
|||
'Africa/Sao_Tome', |
|||
'America/El_Salvador', |
|||
'Asia/Damascus', |
|||
'America/Grand_Turk', |
|||
'Africa/Ndjamena', |
|||
'Indian/Kerguelen', |
|||
'Asia/Bangkok', |
|||
'Asia/Dushanbe', |
|||
'Pacific/Fakaofo', |
|||
'Asia/Dili', |
|||
'Asia/Ashgabat', |
|||
'Africa/Tunis', |
|||
'Pacific/Tongatapu', |
|||
'Europe/Istanbul', |
|||
'America/Port_of_Spain', |
|||
'Pacific/Funafuti', |
|||
'Asia/Taipei', |
|||
'Europe/Kiev', |
|||
'Europe/Uzhgorod', |
|||
'Europe/Zaporozhye', |
|||
'Pacific/Wake', |
|||
'America/New_York', |
|||
'America/Detroit', |
|||
'America/Kentucky/Louisville', |
|||
'America/Kentucky/Monticello', |
|||
'America/Indiana/Indianapolis', |
|||
'America/Indiana/Vincennes', |
|||
'America/Indiana/Winamac', |
|||
'America/Indiana/Marengo', |
|||
'America/Indiana/Petersburg', |
|||
'America/Indiana/Vevay', |
|||
'America/Chicago', |
|||
'America/Indiana/Tell_City', |
|||
'America/Indiana/Knox', |
|||
'America/Menominee', |
|||
'America/North_Dakota/Center', |
|||
'America/North_Dakota/New_Salem', |
|||
'America/North_Dakota/Beulah', |
|||
'America/Denver', |
|||
'America/Boise', |
|||
'America/Phoenix', |
|||
'America/Los_Angeles', |
|||
'America/Anchorage', |
|||
'America/Juneau', |
|||
'America/Sitka', |
|||
'America/Metlakatla', |
|||
'America/Yakutat', |
|||
'America/Nome', |
|||
'America/Adak', |
|||
'Pacific/Honolulu', |
|||
'America/Montevideo', |
|||
'Asia/Samarkand', |
|||
'Asia/Tashkent', |
|||
'America/Caracas', |
|||
'Asia/Ho_Chi_Minh', |
|||
'Pacific/Efate', |
|||
'Pacific/Wallis', |
|||
'Pacific/Apia', |
|||
'Africa/Johannesburg' |
|||
]; |
|||
|
|||
|
|||
export function timezoneList() { |
|||
let result = []; |
|||
|
|||
for (let timezone of aryIannaTimeZones) { |
|||
|
|||
let display = dayjs().tz(timezone).format("Z"); |
|||
|
|||
result.push({ |
|||
name: `(UTC${display}) ${timezone}`, |
|||
value: timezone, |
|||
time: getTimezoneOffset(timezone), |
|||
}) |
|||
} |
|||
|
|||
result.sort((a, b) => { |
|||
if (a.time > b.time) { |
|||
return 1; |
|||
} else if (b.time > a.time) { |
|||
return -1; |
|||
} else { |
|||
return 0; |
|||
} |
|||
}) |
|||
|
|||
return result; |
|||
}; |
|||
|
Loading…
Reference in new issue