Google表格自定义函数API:根据纬度/经度返回日出/日落+ GMT / DST偏移

时间:2018-01-05 21:13:08

标签: json api google-apps-script google-sheets timezone

我想让函数返回日期或日落,格式化为基于坐标的相应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

2 个答案:

答案 0 :(得分:0)

以下修改如何?

修改要点:

  • 从“GeoNames Web Services Documentation”中,您需要的端点为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-gmtOffsetsunrise始终是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;
    };
}