我想让函数返回日期或日落,格式化为基于坐标的相应GMT偏移量。我发现了一个不同的API,可以让您获得给定日期和位置的日出/设定时间,以及提供GMT或DST偏移。
function SunRiseSet(lat,long,date,type) {
var response
UrlFetchApp.fetch("http://api.geonames.org/timezoneJSON?"+lat+"&lng="+long+"&username=northfacejmb"+lat+"&lng="+long+"&date="+date);
var json = response.getContentText();
var data = JSON.parse(json);
var sunrise = data.dates.sunrise;
var sunset = data.dates.sunset;
var gmtOffset = data.gmtOffset;
var dstOffset = data.dstOffset;
if (type == 1) {
return sunrise-gmtOffset;
} else {
return sunset-gmtOffset;
};
}
任何帮助表示赞赏! - 杰里米
上下文:Import Sunrise/Set based on coordinates into Google Sheet using API
答案 0 :(得分:0)
以下修改如何?
npm install -g npm@latest
。 (这是一个样本。)http://api.geonames.org/timezone?lat=47.01&lng=10.2&username=demo&date=#####
和sunrise
的数据位于sunset
数组中。dates
对字符串和数字求和。 sunrise-gmtOffset
未计算为时间。以上各点反映的修改后的脚本如下。
sunrise
function SunRiseSet(lat,long,date,type) {
var url = "http://api.geonames.org/timezoneJSON?lat="+lat+"&lng="+long+"&username=northfacejmb&date="+date;
var response = UrlFetchApp.fetch(url);
var json = response.getContentText();
var data = JSON.parse(json);
var sunrise = data.dates[0].sunrise;
var sunset = data.dates[0].sunset;
var gmtOffset = data.gmtOffset;
var dstOffset = data.dstOffset;
if (type == 1) {
return conv(sunrise, gmtOffset);
} else {
return conv(sunset, gmtOffset);
};
}
function conv(str, offset) {
var r = str.replace(" ", "T");
var converted = new Date(r);
var d = new Date(converted.getTime() - offset * 60 * 60 * 1000);
return Utilities.formatString("%s-%s-%s %s:%s:%s", d.getYear().toString(), addzero(d.getMonth()), addzero(d.getDate()), addzero(d.getHours()), addzero(d.getMinutes()), addzero(d.getSeconds()));
}
function addzero(num) {
var str = num.toString();
return str.length == 1 ? "0" + str : str;
}
和sunrise-gmtOffset
用于检索结果使用您的脚本。这个修改过的脚本假设这些是您想要的结果。sunset-gmtOffset
和sunrise
始终是sunset
的格式。在yyyy-MM-dd HH:mm
,使用它。如果要使用正则表达式,还可以使用如下方法。
conv()
如果我误解了你的问题,我很抱歉。
答案 1 :(得分:0)
使用上面的大部分代码,我能够让它发挥作用。必须在Json查询中包含[0]。此外,计算出的日出/设置与DST偏移已准备就绪,因此无需转换。
function SunRiseSet(lat,long,date,type) {
var url = "http://api.geonames.org/timezoneJSON?lat="+lat+"&lng="+long+"&username=northfacejmb&date="+date;
var response = UrlFetchApp.fetch(url);
var json = response.getContentText();
var data = JSON.parse(json);
var sunrise = data.dates[0].sunrise;
var sunset = data.dates[0].sunset;
var gmtOffset = data.gmtOffset;
var dstOffset = data.dstOffset;
if (type == 1) {
return sunrise;
} else {
return sunset;
};
}