Задать вопрос
Fragster
@Fragster
помогло? отметь решением!

Как из строки даты и времени одного часового пояса получить дату в другом часовом поясе с учетом летнего/зимнего времени и прочего?

Есть строка вида 2025-03-07 10:00 которая является представлением московского времени. Надо получить корректную дату, при этом пользователь находится в другом часовом поясе.
Также функция должна отрабатывать правильно и для тех дат, которые были в периоде, когда в РФ также менялось летнее/зимнее время (т.е. задание фиксированного часового пояса типа +03:00 невозможно).
Использование библиотек типа moment не рекомендуется.
Ищу корректный формат строки даты с часовым поясом в виде названия (MSK или Europe/Moscow), который можно передать в Date.parse() или new Date()
  • Вопрос задан
  • 46 просмотров
Подписаться 1 Простой 5 комментариев
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
ЕМНИП, JS не умеет парсить часовые пояса в формате IANA, ни по полному имени, ни по аббревиатуре.
Ответ написан
Комментировать
Lynn
@Lynn
nginx, js, css
Получилась вот такая функция с использованием Intl.DateTimeFormat.

function guessDate(str) {
    const f = new Intl.DateTimeFormat('en-US', {
        timeZone: 'Europe/Moscow',
        hour: '2-digit',
        minute: '2-digit',
        hour12: false,
    });

    for (const offset of ['+03', '+04', '+02']) {
        const d = new Date(`${str}:00${offset}:00`)
        if (str.endsWith(f.format(d))) {
            // console.log(offset, '\t', str);
            return d;
        }
    }
}


Пример результатов (из console.log):
+03      1980-06-01 12:00
+03      1980-12-01 12:00
+04      1981-06-01 12:00
+03      1981-12-01 12:00
+03      1991-06-01 12:00
+02      1991-12-01 12:00
+04      1992-06-01 12:00
+03      1992-12-01 12:00
+04      2011-06-01 12:00
+04      2011-12-01 12:00
+04      2014-06-01 12:00
+03      2014-12-01 12:00
+03      2015-06-01 12:00
+03      2015-12-01 12:00
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы