Luxon конвертировать местное время в UTC с учетом часового пояса

Источник данных имеет поле даты-времени ISO-8601 без смещения.

Пример: 2019-07-09T18:45

Тем не менее, я знаю, что рассматриваемое время понимается как America/Chicago часовой пояс.

Как я могу получить объект Luxon DateTime этого времени в UTC?

я могу сделать DateTime.fromISO('2019-07-09T18:45').plus({hours: 5})... но это будет действовать только в течение полугода (как сейчас), когда наступает летнее время. В противном случае смещение будет .plus({hours: 6})

Есть ли в Luxon метод с учетом даты (и, следовательно, с учетом летнего времени) для преобразования из конкретного зонированного местного времени в UTC?

2 ответа

Решение

Поскольку вы знаете часовой пояс введенной вами даты, вы можете использовать zone вариант при разборе. Как fromISO Документы говорится:

public static fromISO(text: string, opts: Object): DateTime

opts.zone: используйте эту зону, если в самой строке ввода не указано смещение.

Тогда вы можете использовать toUTC конвертировать ваш DateTime в UTC:

"Установите" для зоны DateTime значение UTC. Возвращает вновь созданный DateTime.

Эквивалент setZone ('utc')

Вот живой пример:

const DateTime = luxon.DateTime;
const d = DateTime.fromISO('2019-07-09T18:45', {zone: 'America/Chicago'});
console.log(d.toISO());
console.log(d.toUTC().toISO());
<script src="https://cdn.jsdelivr.net/npm/luxon@1.16.0/build/global/luxon.js"></script>

Вы можете ссылаться на следующую функцию Luxon:

  1. isInDST https://moment.github.io/luxon/docs/class/src/datetime.js~DateTime.html

Чтобы проверить, основано ли текущее время на летнем времени или нет!

  1. toUTC: функция для преобразования времени в UTC

https://moment.github.io/luxon/docs/class/src/datetime.js~DateTime.html

Другие вопросы по тегам