Получить смещение часового пояса от имени часового пояса, используя Javascript
Я нашел много решений, которые дают название часового пояса из значения смещения. Но у меня есть имя часового пояса, и я хочу значение смещения для этого. Я пробовал setTimezone("Азия / Калькутта"), но я думаю, что это не такой метод, как setTimezone.
пример:
Asia/Kolkata should give me -330 ( offset )
4 ответа
Это самый простой способ решить эту задачу с помощью современного JavaScript.
Примечание. Имейте в виду, что смещение зависит от того, активно ли летнее время (DST).
Я столкнулся с этой же проблемой, и это решение, которое я придумал, если вы можете получить имя базы данных IANA tz, подобное тому, которое вы упомянули:
var myTimezoneName = "Asia/Colombo";
// Generating the formatted text
var options = {timeZone: myTimezoneName, timeZoneName: "short"};
var dateText = Intl.DateTimeFormat([], options).format(new Date);
// Scraping the numbers we want from the text
var timezoneString = dateText.split(" ")[1].slice(3);
// Getting the offset
var timezoneOffset = parseInt(timezoneString.split(':')[0])*60;
// Checking for a minutes offset and adding if appropriate
if (timezoneString.includes(":")) {
var timezoneOffset = timezoneOffset + parseInt(timezoneString.split(':')[1]);
}
Это не очень хорошее решение, но оно выполняет свою работу, ничего не импортируя. Он полагается на согласованность формата вывода Intl.DateTimeFormat, что и должно быть, но это потенциальное предостережение.
Вы не можете получить это только по имени. Вам также необходимо знать конкретное время. Asia/Kolkata
может быть установлено одно смещение, но многие часовые пояса чередуются между стандартным временем и летним временем, поэтому вы не можете просто получить смещение, вы можете только получить смещение.
Как это сделать в JavaScript, смотрите в этом ответе.
Использование пакета npm для стран и часовых поясов:
import {getTimezone} from 'countries-and-timezones';
const australianTimezone = 'Australia/Melbourne';
console.log(getTimezone(australianTimezone));
Выводит на консоль:
{
name: 'Australia/Melbourne',
country: 'AU',
utcOffset: 600,
utcOffsetStr: '+10:00',
dstOffset: 660,
dstOffsetStr: '+11:00',
aliasOf: null
}
Оттуда вы можете использовать utcOffset или dstOffset в зависимости от того, летнее время.