Я отвечу на это в двух частях:
1) Найдите набор данных, который содержит имена часовых поясов и их смещения
Вы можете скомпилировать этот набор данных вручную.(возможно, используя данные из Википедии), в качестве альтернативы пакет NPM timezones.json выглядит подходящим.
2) Поиск в списке
Учитываядва входа: начальный часовой пояс и смещение (например, GMT
& -8
), вам необходимо:
Поиск в наборе данных смещения исходного часового пояса (например, GMT
is +0
)
Добавьте два значения вместе, например, GMT-8
=> 0 - 8 = -8
Отфильтруйте набор данных по значениям со смещениемиз -8
Пример:
Допустим, у вас есть содержимое timezones.json
из пакета NPM выше в переменной timezones_file
const timezones = JSON.parse(timezones_file);
// Step 1 above
function findOffset(timezone) {
const matches = timezones.filter( zone => zone.abbr === timezone );
return matches ? matches[0].offset : null;
}
// Step 2 above
function findByOffset(offset) {
return timezones.filter( zone => zone.offset === offset );
}
// Answer to your question, accepts a timezone (e.g. 'GMT') and offset (e.g. -8)
function getListOfTimezones(initial_timezone, initial_offset) {
const new_offset = findOffset(initial_timezone) + initial_offset;
return findByOffset(new_offset);
}