Как определить часовой пояс из даты

Поддержка
  • Есть дата вот в таком формате
    2022-09-13T21:33:06Z

    Как определить часовой пояс, чтобы изменить DATE_NOW в тот же часовой пояс ?

    Z это я так понимаю 0, тоесть DATE_NOW надо переводить с 0
    или вообще тогда ничего переводить не надо ?

  • Верно, Z обозначает нулевое смещение UTC. В данном случае переводить время нужно на UTC 00:00, потому что блок "Дата сейчас" показывает время с текущим часовым поясом компьютера (с другим UTC).

    Чтобы применить нужное смещение ко времени компьютера, я обычно делаю так:

    [[DATE_NOW1]] = applyOffset(0);      //Пример для 2022-09-13T21:33:06Z      (Гвинея) UTC 00:00
    [[DATE_NOW2]] = applyOffset(3*60);   //Пример для 2022-09-13T21:33:06+03:00 (Москва) UTC 03:00
    [[DATE_NOW3]] = applyOffset(-4*60);  //Пример для 2022-09-13T21:33:06-04:00 (Ямайка) UTC -04:00
    
    function applyOffset(offset) {
        var userOffset = new Date().getTimezoneOffset(); //Текущее смещение компьютера (UTC в минутах)
        var differenceOffset = userOffset + offset;      //Вычисление нужного смещения (применим к текущему времени)
        var dateComputer = new Date();                   //Текущие дата и время на компьютере
        var result = dateComputer.setMinutes(dateComputer.getMinutes() + differenceOffset); //Применение смещения
        return new Date(result);
    }
    

    Правильно меняет время и меняет дату (если по нужному UTC уже наступил другой день). Какой часовой пояс на компьютере - неважно, все успешно применится (главное, чтобы время по настроенному часовому поясу компьютера было правильным). Если нужно изменять дату и время под определенную страну, то следует помнить, что есть места, где, например, зимой UTC -04:00, а весной переводится на UTC -03:00. Если нужно просто применить смещение по UTC, то проблем никаких нет (время по UTC не переводится ни зимой, ни летом).

    А стандартный блок "Изменить часовой пояс даты" у меня почему-то вообще не работает).

  • Спасибо, думал кубик изменить часовой пояс и должен это делать...ф

  • чтобы исключить ошибки неправильно установленного времени на компе с которого запускается скрипт, нашел пример как получать время в заданном часовом поясе по API

        let plus = 3; // Сколько времени прибавляем (+3 это время по Москве)
        var xhr = new XMLHttpRequest();
        xhr.open('GET', 'http://worldtimeapi.org/api/timezone/Europe/London', false); // Делаем запрос по Лондону
        xhr.send(); // отправляем
        if (xhr.status != 200) {
            console.log( xhr.status + ': ' + xhr.statusText ); // Если статус не равен 200, то выводим ошибку.
        } else {
            let time = xhr.responseText; // получаем текст ответа
            let z = JSON.parse(time).utc_datetime; // Получаем время utc
            let time1 = new Date(z).getTime(); // Переводим в timestamp
            let timestampPlus = time1 + (plus * 60 * 60 * 1000); // Воемя +3 часа. Если надо получить время UTC, то убираем просто параметр plus
            let timePlus = new Date(timestampPlus); // Переводим во время (Тут надо понимать, что система сама переведёт его в текущую временную зону
            let result = timePlus.toUTCString();  // Переводим в строку UTC;
            console.log(result); // Выводим дату. 
        }
    

    вообщем пойду тестировать.