如何显示被搜索城市当地时间的日出日落时间
How to display sunrise and sunset time in the local time of the city that is being searched
我创建了一个通过搜索城市名称来显示日出和日落的项目。我用的是开放天气API.
但是,当我搜索与我的国家(希腊)时区不同的城市时,它会将日出日落时间转换为希腊当地时区。
例如,我搜索“阿尔巴尼亚”
阿尔巴尼亚的日出日落时间是按希腊时区显示的。
(注:希腊超前阿尔巴尼亚1小时)
通常,阿尔巴尼亚的日出日落时间是:7:02 AM 和 4:35 PM。
但是,它显示的 8:02 和 17:35 比正常的日出日落时间提前 1 小时,因为它们被转换为希腊当地时区。
我的代码
let weather = {
apiKey: "XXXXXXXXXXXXXXXXXXXXX",
fetchWeather: function (city) {
fetch(
"https://api.openweathermap.org/data/2.5/weather?q=" +
city +
"&units=metric&lang=en&appid=" +
this.apiKey
)
.then((response) => {
if (!response.ok) {
alert("No weather found.");
throw new Error("No weather found.");
}
return response.json();
})
.then((data) => this.displayWeather(data));
},
//fetching the API parameters:
displayWeather: function (data) {
const { name } = data;
const { sunrise } = data.sys;
const { sunset } = data.sys;
//Displaying the results:
document.querySelector(".city").innerText = "Weather: " + name;
document.querySelector(".sunrise").innerText = "Sunrise: " + window.moment(sunrise * 1000).format('HH:mm a');
document.querySelector(".sunset").innerText = "Sunset: " + window.moment(sunset * 1000).format('HH:mm a');
document.querySelector(".weather").classList.remove("loading");
document.body.style.backgroundImage =
"url('https://source.unsplash.com/1600x900/?')";
},
search: function () {
this.fetchWeather(document.querySelector(".search-bar").value);
},
};
document.querySelector(".search button").addEventListener("click", function () {
weather.search();
});
document
.querySelector(".search-bar")
.addEventListener("keyup", function (event) {
if (event.key == "Enter") {
weather.search();
}
});
//Displaying Athens sunrise sunset on page load
weather.fetchWeather("Athens");
我希望它显示每个城市的正常日出日落当地时间,而不显示希腊时区。
谁能帮帮我?我是初学者,所以如果你能详细说明你的答案,我将不胜感激。
在您的 API 响应中,您将收到一个以秒为单位的 timezone
属性 (positive/negative)。你可以从那里提取它。我将 UNIX 时间戳转换为 UTC 并添加了 timezone
.
这是阿尔巴尼亚地拉那的日出时间
let timezone = 3600;
let sunrise = 1642226661;
let x = moment.utc(sunrise,'X').add(timezone,'seconds').format('HH:mm a');
console.log(x);
<script src="https://momentjs.com/downloads/moment.js"></script>
我创建了一个通过搜索城市名称来显示日出和日落的项目。我用的是开放天气API.
但是,当我搜索与我的国家(希腊)时区不同的城市时,它会将日出日落时间转换为希腊当地时区。
例如,我搜索“阿尔巴尼亚”
阿尔巴尼亚的日出日落时间是按希腊时区显示的。 (注:希腊超前阿尔巴尼亚1小时)
通常,阿尔巴尼亚的日出日落时间是:7:02 AM 和 4:35 PM。
但是,它显示的 8:02 和 17:35 比正常的日出日落时间提前 1 小时,因为它们被转换为希腊当地时区。
我的代码
let weather = {
apiKey: "XXXXXXXXXXXXXXXXXXXXX",
fetchWeather: function (city) {
fetch(
"https://api.openweathermap.org/data/2.5/weather?q=" +
city +
"&units=metric&lang=en&appid=" +
this.apiKey
)
.then((response) => {
if (!response.ok) {
alert("No weather found.");
throw new Error("No weather found.");
}
return response.json();
})
.then((data) => this.displayWeather(data));
},
//fetching the API parameters:
displayWeather: function (data) {
const { name } = data;
const { sunrise } = data.sys;
const { sunset } = data.sys;
//Displaying the results:
document.querySelector(".city").innerText = "Weather: " + name;
document.querySelector(".sunrise").innerText = "Sunrise: " + window.moment(sunrise * 1000).format('HH:mm a');
document.querySelector(".sunset").innerText = "Sunset: " + window.moment(sunset * 1000).format('HH:mm a');
document.querySelector(".weather").classList.remove("loading");
document.body.style.backgroundImage =
"url('https://source.unsplash.com/1600x900/?')";
},
search: function () {
this.fetchWeather(document.querySelector(".search-bar").value);
},
};
document.querySelector(".search button").addEventListener("click", function () {
weather.search();
});
document
.querySelector(".search-bar")
.addEventListener("keyup", function (event) {
if (event.key == "Enter") {
weather.search();
}
});
//Displaying Athens sunrise sunset on page load
weather.fetchWeather("Athens");
我希望它显示每个城市的正常日出日落当地时间,而不显示希腊时区。
谁能帮帮我?我是初学者,所以如果你能详细说明你的答案,我将不胜感激。
在您的 API 响应中,您将收到一个以秒为单位的 timezone
属性 (positive/negative)。你可以从那里提取它。我将 UNIX 时间戳转换为 UTC 并添加了 timezone
.
这是阿尔巴尼亚地拉那的日出时间
let timezone = 3600;
let sunrise = 1642226661;
let x = moment.utc(sunrise,'X').add(timezone,'seconds').format('HH:mm a');
console.log(x);
<script src="https://momentjs.com/downloads/moment.js"></script>