如何从正在获取的城市获取 Open Weather API date/time?
How to obtain Open Weather API date/time from city being fetched?
我正在使用 Open Weather API 创建一个简单的天气 React 应用程序。我还在为天气图标使用外部库。
用户输入城市名称并根据描述获取带有特定图标的当前温度。
我的问题是无法判断现在是晚上还是白天,具体取决于需要显示的图标。
我从数据中得知正在为城市获取 Unix 时间戳,但是当我转换它时,显示的是当地时间。还有一个时区偏移,但根据我的理解不能转换为 JavaScript 中的城市名称。我已经检查了 npm
个软件包,但找不到一个。我希望能够获取正在搜索的特定城市的 date/time,而不是我的本地时间。
我应该换一个 API 吗?以下是从伦敦提取的数据:
{coord: {…}, weather: Array(1), base: "stations", main: {…}, visibility: 10000, …}
base: "stations"
clouds: {all: 40}
cod: 200
coord: {lon: -0.13, lat: 51.51}
dt: 1592155233
id: 2643743
main: {temp: 71.8, feels_like: 66.69, temp_min: 71.01, temp_max: 73, pressure: 1014, …}
name: "London"
sys: {type: 1, id: 1414, country: "GB", sunrise: 1592106173, sunset: 1592165939}
timezone: 3600
visibility: 10000
weather: Array(1)
0: {id: 802, main: "Clouds", description: "scattered clouds", icon: "03d"}
length: 1
__proto__: Array(0)
wind: {speed: 9.17, deg: 170}
我相信你可能以错误的方式思考这个问题。
你必须查询你想要的时间段的天气,否则它怎么知道你问的是哪个天气时段。
因此,在您的查询中您必须提供您想要天气的时间段和位置。现在,如果您不考虑它,它总是默认为 当前时期 天气。
例如你的电话应该是这样的 -
// modify it your needs with version, city, API etc
http://history.openweathermap.org/data/2.5/history/city?[location]&type=hour&start={start}&cnt={cnt}&appid={YOUR_API_KEY}
现在当您收到回复时,您可以将它与您city
和date time
联系起来date time
正在求!
他们给了你一个时区:
const obj = {
dt: 1592155233,
id: 2643743,
main: {
temp: 71.8,
feels_like: 66.69,
temp_min: 71.01,
temp_max: 73,
pressure: 1014,
},
name: "London",
sys: {
type: 1,
id: 1414,
country: "GB",
sunrise: 1592106173,
sunset: 1592165939
},
timezone: 3600
}
console.log(new Date(obj.dt*1000-(obj.timezone*1000))); // minus
console.log(new Date(obj.dt*1000+(obj.timezone*1000))); // plus
您可以通过API返回的数据中的timezone
获取当前时间。 Open Weather API 文档描述如下:
timezone
: 从 UTC 开始以秒为单位偏移
我想出了如何从获取数据的特定城市获取正确的时间。 Open Weather 以秒为单位显示时区。对于示例,我将使用佐治亚州亚特兰大的时间偏移量 -14400。见下文:
d = new Date()
localTime = d.getTime()
localOffset = d.getTimezoneOffset() * 60000
utc = localTime + localOffset
var atlanta = utc + (1000 * -14400)
nd = new Date(atlanta)
// Mon Jun 15 2020 17:07:59 GMT-0700
基本上按照以下步骤进行:
- 获取当前本地时间
- 查找当地时间偏移量
- 获取当前UTC时间
- 获取目的地城市的时差并转换为毫秒
- 转换为可读格式
如果您主要关心的是图标显示为白天还是晚上,而 API 已经有一组内置的图标和数据来确定是白天还是晚上,用于查看适合哪个图标。这是来自 OpenWeatherMap 的图标列表
Weather Conditions。如果您转到 JSON 文件,您会在顶部的 "weather"
数组中看到类似 "icon": "04n"
的内容。 n
(就像在这个特定的例子中一样)决定了在哪里显示夜晚或白天的图标。为了实际显示图标有点不同,基本上“应该做的事情”是这样的。在 HTML 中创建图像元素,然后使用 DOM 并根据 API 发送的内容更改其 src 属性。
我正在使用 Open Weather API 创建一个简单的天气 React 应用程序。我还在为天气图标使用外部库。
用户输入城市名称并根据描述获取带有特定图标的当前温度。
我的问题是无法判断现在是晚上还是白天,具体取决于需要显示的图标。
我从数据中得知正在为城市获取 Unix 时间戳,但是当我转换它时,显示的是当地时间。还有一个时区偏移,但根据我的理解不能转换为 JavaScript 中的城市名称。我已经检查了 npm
个软件包,但找不到一个。我希望能够获取正在搜索的特定城市的 date/time,而不是我的本地时间。
我应该换一个 API 吗?以下是从伦敦提取的数据:
{coord: {…}, weather: Array(1), base: "stations", main: {…}, visibility: 10000, …}
base: "stations"
clouds: {all: 40}
cod: 200
coord: {lon: -0.13, lat: 51.51}
dt: 1592155233
id: 2643743
main: {temp: 71.8, feels_like: 66.69, temp_min: 71.01, temp_max: 73, pressure: 1014, …}
name: "London"
sys: {type: 1, id: 1414, country: "GB", sunrise: 1592106173, sunset: 1592165939}
timezone: 3600
visibility: 10000
weather: Array(1)
0: {id: 802, main: "Clouds", description: "scattered clouds", icon: "03d"}
length: 1
__proto__: Array(0)
wind: {speed: 9.17, deg: 170}
我相信你可能以错误的方式思考这个问题。
你必须查询你想要的时间段的天气,否则它怎么知道你问的是哪个天气时段。
因此,在您的查询中您必须提供您想要天气的时间段和位置。现在,如果您不考虑它,它总是默认为 当前时期 天气。
例如你的电话应该是这样的 -
// modify it your needs with version, city, API etc
http://history.openweathermap.org/data/2.5/history/city?[location]&type=hour&start={start}&cnt={cnt}&appid={YOUR_API_KEY}
现在当您收到回复时,您可以将它与您city
和date time
联系起来date time
正在求!
他们给了你一个时区:
const obj = {
dt: 1592155233,
id: 2643743,
main: {
temp: 71.8,
feels_like: 66.69,
temp_min: 71.01,
temp_max: 73,
pressure: 1014,
},
name: "London",
sys: {
type: 1,
id: 1414,
country: "GB",
sunrise: 1592106173,
sunset: 1592165939
},
timezone: 3600
}
console.log(new Date(obj.dt*1000-(obj.timezone*1000))); // minus
console.log(new Date(obj.dt*1000+(obj.timezone*1000))); // plus
您可以通过API返回的数据中的timezone
获取当前时间。 Open Weather API 文档描述如下:
timezone
: 从 UTC 开始以秒为单位偏移
我想出了如何从获取数据的特定城市获取正确的时间。 Open Weather 以秒为单位显示时区。对于示例,我将使用佐治亚州亚特兰大的时间偏移量 -14400。见下文:
d = new Date()
localTime = d.getTime()
localOffset = d.getTimezoneOffset() * 60000
utc = localTime + localOffset
var atlanta = utc + (1000 * -14400)
nd = new Date(atlanta)
// Mon Jun 15 2020 17:07:59 GMT-0700
基本上按照以下步骤进行:
- 获取当前本地时间
- 查找当地时间偏移量
- 获取当前UTC时间
- 获取目的地城市的时差并转换为毫秒
- 转换为可读格式
如果您主要关心的是图标显示为白天还是晚上,而 API 已经有一组内置的图标和数据来确定是白天还是晚上,用于查看适合哪个图标。这是来自 OpenWeatherMap 的图标列表
Weather Conditions。如果您转到 JSON 文件,您会在顶部的 "weather"
数组中看到类似 "icon": "04n"
的内容。 n
(就像在这个特定的例子中一样)决定了在哪里显示夜晚或白天的图标。为了实际显示图标有点不同,基本上“应该做的事情”是这样的。在 HTML 中创建图像元素,然后使用 DOM 并根据 API 发送的内容更改其 src 属性。