Вы можете использовать параметры timeZone и timeZoneName объекта Intl.DateTimeFormat , как показано ниже, чтобы получить имя более распространенных, но менее известных часовых поясов. вероятно, будет отсутствовать. Также:
- Вы не можете получить их обоих одновременно, поэтому вам нужно вызвать их дважды
- В некоторых случаях вы просто получите короткие и длинные имена без фактическое смещение
- Имена часовых поясов не стандартизированы, поэтому разные реализации могут возвращать разные имена или просто фактическое смещение без имени.
- Вы получите смещение для даты и времени что вы создаете, а не дату и время для местоположения, поэтому может быть неправильно, если эта разница пересекает границу перехода на летнее время
например
// Get short offset, might show the actual offset but might be a short name
let formatterA = new Intl.DateTimeFormat('en',{timeZone:'America/New_York', timeZoneName:'short'});
console.log( formatterA.format(new Date()) ); // 5/2/2020, EDT
// Get short offset, might show the actual offset but might be a short name
let formatterB = new Intl.DateTimeFormat('en',{timeZone:'America/New_York', timeZoneName:'long'});
console.log( formatterB.format(new Date()) ); // 5/2/2020, Eastern Daylight Time
Другая стратегия получения смещения заключается в создании даты в часовом поясе и получении разницы от даты UT C с тем же годом, месяцем, днем и т. Д. c. значения путем анализа результатов. У этого все еще есть проблема границы летнего времени. Метод Intl.DateTimeFormat.prototype.formatToParts помогает при этом ответе .
Однако я предлагаю вам использовать такую библиотеку, как Luxon в качестве возиться с этой мелочью, возможно, не о чем, особенно о летних изменениях.
var DateTime = luxon.DateTime;
let d = DateTime.fromISO("2017-05-15T09:10:23", { zone: "Europe/Paris" });
console.log(d.toFormat('ZZ')); // +02:00
console.log(d.toFormat('ZZZZZ')); // Central European Summer Time
let e = DateTime.fromISO("2017-05-15T09:10:23", { zone: "Pacific/Kiritimati" });
console.log(e.toFormat('ZZ')); // +14:00
console.log(e.toFormat('ZZZZZ')); // Line Islands Time
<script src="https://cdn.jsdelivr.net/npm/luxon@1.23.0/build/global/luxon.min.js"></script>