Большинство проголосовавших ответ , вероятно, лучший способ получить часовой пояс, однако, Intl.DateTimeFormat().resolvedOptions().timeZone
возвращает имя часового пояса IANA по определению, которое на английском языке.
Если вам нужно имя часового пояса на языке текущего пользователя, вы можете проанализировать его из строкового представления Date
следующим образом:
function getTimezoneName() {
const today = new Date();
const short = today.toLocaleDateString(undefined);
const full = today.toLocaleDateString(undefined, { timeZoneName: 'long' });
// Trying to remove date from the string in a locale-agnostic way
const shortIndex = full.indexOf(short);
if (shortIndex >= 0) {
const trimmed = full.substring(0, shortIndex) + full.substring(shortIndex + short.length);
// by this time `trimmed` should be the timezone's name with some punctuation -
// trim it from both sides
return trimmed.replace(/^[\s,.\-:;]+|[\s,.\-:;]+$/g, '');
} else {
// in some magic case when short representation of date is not present in the long one, just return the long one as a fallback, since it should contain the timezone's name
return full;
}
}
console.log(getTimezoneName());
Протестировано в Chrome и Firefox.
Конечно, это не будет работать так, как задумано в некоторых средах. Например, node.js возвращает смещение GMT (например, GMT+07:00
) вместо имени. Но я думаю, что это все еще читается как запасной вариант.
P.S. Не будет работать в IE11, как и решение Intl...
.