@Revers эм... ну решил, скинь решение сюда. Или в чем прикол вести себя как алкашня по итогу я все решил, досвидос)
Как определить часовой пояс из даты
-
Есть дата вот в таком формате
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); // Выводим дату. }вообщем пойду тестировать.