【问题标题】:JQuery new Date() and loopJQuery new Date() 和循环
【发布时间】:2016-12-07 22:43:44
【问题描述】:

我正在尝试制作简单的天气应用程序,但遇到了一些问题。 我正在使用 openweathermap.org 的 API 来获取最低和最高温度。 这是我的钥匙:

http://api.openweathermap.org/data/2.5/forecast/daily?callback=fetchData&q=London&appid=redacted&units=metric&_=1481140918291

现在对于我正在使用的 API,他们不提供日期,所以我尝试使用以下代码自行完成:

forecast.list.forEach(function(forecastEntry, index, list){

    today = new Date();

    html += '<p>'+ today + ': ' + forecastEntry.temp.min + '< ' + forecastEntry.temp.max + '</p>'

})

现在这得到了我的一些输出:

2016 年 12 月 7 日星期三 22:29:27 GMT+0100(中欧标准时间):9.62

2016 年 12 月 7 日星期三 22:29:27 GMT+0100(中欧标准时间):-6.​​73

2016 年 12 月 7 日星期三 22:29:27 GMT+0100(中欧标准时间):-7.95

2016 年 12 月 7 日星期三 22:29:27 GMT+0100(中欧标准时间):-6.​​34

2016 年 12 月 7 日星期三 22:29:27 GMT+0100(中欧标准时间):-2

2016 年 12 月 7 日星期三 22:29:27 GMT+0100(中欧标准时间):1.72

我尝试过这样做:

for (i=0;i<8;i++) {
        var today = new Date();
        today.setDate(today.getDate()+i);
        console.log(today);
        html += '<p>' + today + forecastEntry.temp.min + '< ' + forecastEntry.temp.max + '</p>'
}

这解决了天数问题,但由于我的 forEach 循环,我认为它会多次重复我的整个输出。我是 JS 新手,我真的很难解决这个问题。任何帮助,将不胜感激。这是我整个代码的 JSBIN:http://jsbin.com/lafurih/edit?html,js,output

编辑:澄清我的问题。输出显示我想要 8 天,但它显示了 8 次。

【问题讨论】:

  • 您已经描述了它的功能,但没有描述您想要它做什么。您能否指定预期的行为?
  • 你在发布你的 appid 时应该小心,因为现在任何人都可以使用它并且他们将能够用完你分配的请求......
  • @JohnWu 看看 JSBIN 并输入 London 例如现在你会看到输出很多次,但我只想要 1 次。
  • @MikeMcCaughan 是的,我知道这很冒险,但我想详细描述我的问题....
  • ??你想要一次吗???以为你想要八天的预测。如果您只想要一天,请摆脱 for 循环。我是不是误会了?

标签: javascript jquery date datetime


【解决方案1】:

错误是您将 for 循环放在 foreach 循环中。这应该有效:http://jsbin.com/hiyupisivi/edit?html,js,output

我删除了 for 循环,并将 i 变量放在 foreach 循环之外,然后每次循环运行时递增它。

函数最终会是这样的:

function fetchData (forecast) {
    console.log(forecast)
    var html = '',
    cityName = forecast.city.name,
    country = forecast.city.country,
    cnt = forecast.cnt
    var i = 0;

    html += '<h3> Weather Forecast for ' + cityName + ', ' + country + ', ' + cnt + ' days</h3>'
    forecast.list.forEach(function(forecastEntry, index, list){
            var today = new Date();
            today.setDate(today.getDate()+i);
            console.log(today);
            html += '<p>' + today + forecastEntry.temp.min + '< ' + forecastEntry.temp.max + '</p>'
            i++;
    })
}

【讨论】:

  • 你运行的是完全相同的代码吗?它对我有用。
  • 它的工作原理 JSBin 有问题,这就是为什么它一开始对我不起作用的原因。非常感谢。
  • 请在问题本身中包含您更改的代码。如果该站点出现故障或该示例已从他们的站点中删除,则此答案对其他人的帮助将减少。
  • @MikeMcCaughan 你是说我吗?在这种情况下,我需要在我的问题中添加解决方案吗?
  • 对不起,这是一个样板评论。在答案中包含代码。
猜你喜欢
  • 1970-01-01
  • 2021-04-09
  • 2019-06-17
  • 2017-06-18
  • 1970-01-01
  • 2017-02-14
  • 2019-11-12
  • 1970-01-01
相关资源
最近更新 更多