【发布时间】:2020-06-05 16:35:47
【问题描述】:
我得到了日出/日落时间的虚假值(例如内华达州):
let url = "http://api.openweathermap.org/data/2.5/weather?q=Nevada,us&APPID=<app_id>&units=metric"
let req = new Request(url)
let json = await req.loadJSON()
function convertTime(unixTime){
let dt = new Date(unixTime * 1000)
let h = dt.getHours()
let m = "0" + dt.getMinutes()
let t = h + ":" + m.substr(-2)
return t
}
let sRise = convertTime(json.sys.sunrise)
let sSet = convertTime(json.sys.sunset)
alert(convertTime(sRise));
// Shows: 14:32 should be 05:24
alert(convertTime(sSet));
// Shows: 05:10 should be 19:55
我错过了什么吗? (P.S. 我在欧洲,但通过代理得到了相同的结果)。
【问题讨论】:
-
看起来您每次都在您的 URL 中专门查询美国内华达州:
?q=Nevada,us。也许如果您想更改语言环境,请输入其他内容。例如?q=Florence,it&APPID=<app_id>&units=metric -
它的时间转换功能。默认情况下,当您使用
dt.getHours时,它会返回本地时间 的小时数。欧洲的14:32是内华达州的日出,这似乎并不过分。 -
您正在使用返回的时间戳创建本地日期,因此 JavaScript 会认为您需要 您的时区的日期实例,而不是目标时区。
-
考虑放弃
convertTime功能,转而使用更灵活且内置的Date.toLocaleTimeString。 -
注意:
timezone与sys一起返回的数据元素具有(我相信)目标时区与 UTC 的秒数变化。