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

Рейтинг: 0Ответов: 1Опубликовано: 27.07.2023
async function getAboutInfo(weather) {
  weatherAboutIcon.src = `https://openweathermap.org/img/wn/${weather.weather[0].icon}@2x.png`;

  weatherAboutCountry.style.fontWeight = "bold";
  weatherAboutSunrise.style.fontWeight = "bold";
  weatherAboutSunset.style.fontWeight = "bold";

  const weatherTimeZone = weather.timezone;

  const sunriseTime = new Date(weather.sys.sunrise * 1000);
  const formattedSunriseTime = sunriseTime.toLocaleTimeString();
  console.log(sunriseTime);

  const sunsetTime = new Date(weather.sys.sunset * 1000);
  const formattedSunsetTime = sunsetTime.toLocaleTimeString();
  console.log(sunsetTime);

  const finalSunriseTime = formattedSunriseTime.substring(0, 5);
  const finalSunsetTime = formattedSunsetTime.substring(0, 5);

  weatherAboutCountry.innerHTML = `${weather.sys.country}`;
  weatherAboutSunrise.innerHTML = `${finalSunriseTime} UTC`;
  weatherAboutSunset.innerHTML = `${finalSunsetTime} UTC`;
}

Есть функция, которая должна передавать в блок информацию о Домене страны, времени восхода солнца и времени заката. функция принимает weather с другой функции, далее sunriseTime и sunsetTime становятся объектом Date, и принимают данные восхода солнца и заката для конкретной страны по API, данные умножаются на 1000 чтобы отобразить в нынешнем времени(не с 1970 года). Далее используется функция toLocaleTimeString(). Однако из-за toLocaleTimeString() я преобразую миллисекунды в часы/минуты/секунды, но по своему локальному времени, как мне сделать так, чтобы при вводе в инпут другого города, учитывался часовой пояс, и данные показывало точно. Сейчас данные показывает точно только по локальному времени моего города.

Пробовал достать данные временной зоны по API и прибавить их следующим образом:

  const sunriseTime = new Date(weather.sys.sunrise * 1000 + weather.timezone);
  const sunsetTime = new Date(weather.sys.sunset * 1000 + weather.timezone);

таким образом пытался добиться нужного результата, но это не помогло, может кто-то уже сталкивался с подобной проблемой?

Ответы

▲ 0
import dayjs from 'dayjs';
import 'dayjs/locale/ru'; // Опционально, если хотите использовать 
русский формат даты и времени

const TimezoneExample = () => {
const now = dayjs.utc();  // Получаем текущую дату и время в UTC

// Функция для форматирования даты и времени в нужном формате и часовом поясе 


const formatTime = (dateTime, timezone) => {
  return dateTime.tz(timezone).format('YYYY-MM-DD HH:mm:ss');
};

return (
  <div>
    <p>Время в США (Нью-Йорк): {formatTime(now, 'America/New_York')}</p>
    <p>Время в Японии (Токио): {formatTime(now, 'Asia/Tokyo')}</p>
  </div>
);

};