Bert Verhelst
3 years ago
5 changed files with 214 additions and 421 deletions
@ -1,404 +0,0 @@ |
|||
import dayjs from "dayjs"; |
|||
import timezone from "dayjs/plugin/timezone"; |
|||
import utc from "dayjs/plugin/utc"; |
|||
|
|||
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
|
|||
// TODO: Move to separate file
|
|||
const aryIannaTimeZones = [ |
|||
"Europe/Andorra", |
|||
"Asia/Dubai", |
|||
"Asia/Kabul", |
|||
"Europe/Tirane", |
|||
"Asia/Yerevan", |
|||
"Antarctica/Casey", |
|||
"Antarctica/Davis", |
|||
"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/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) { |
|||
|
|||
try { |
|||
let display = dayjs().tz(timezone).format("Z"); |
|||
|
|||
result.push({ |
|||
name: `(UTC${display}) ${timezone}`, |
|||
value: timezone, |
|||
time: getTimezoneOffset(timezone), |
|||
}) |
|||
} catch (e) { |
|||
console.error(e.message); |
|||
console.log("Skip this timezone") |
|||
} |
|||
|
|||
} |
|||
|
|||
result.sort((a, b) => { |
|||
if (a.time > b.time) { |
|||
return 1; |
|||
} |
|||
|
|||
if (b.time > a.time) { |
|||
return -1; |
|||
} |
|||
|
|||
return 0; |
|||
}) |
|||
|
|||
return result; |
|||
} |
@ -0,0 +1,54 @@ |
|||
import * as dayjs from "dayjs"; |
|||
import * as timezone from "dayjs/plugin/timezone"; |
|||
import * as utc from "dayjs/plugin/utc"; |
|||
import timezones from "timezones-list"; |
|||
|
|||
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; |
|||
} |
|||
|
|||
export function timezoneList() { |
|||
|
|||
let result = []; |
|||
|
|||
for (let timezone of timezones) { |
|||
|
|||
try { |
|||
let display = dayjs().tz(timezone.tzCode).format("Z"); |
|||
|
|||
result.push({ |
|||
name: `(UTC${display}) ${timezone.tzCode}`, |
|||
value: timezone.tzCode, |
|||
time: getTimezoneOffset(timezone.tzCode), |
|||
}) |
|||
} catch (e) { |
|||
console.error(e.message); |
|||
console.log("Skip this timezone") |
|||
} |
|||
|
|||
} |
|||
|
|||
result.sort((a, b) => { |
|||
if (a.time > b.time) { |
|||
return 1; |
|||
} |
|||
|
|||
if (b.time > a.time) { |
|||
return -1; |
|||
} |
|||
|
|||
return 0; |
|||
}) |
|||
|
|||
return result; |
|||
} |
Loading…
Reference in new issue