simpleWeather和moment.js - 在德国与js-geolocation无效的日期

时间:2015-10-15 12:17:13

标签: geolocation momentjs

嘿嘿=)

我想为我的网站创建一个Weather Plugin。所以我选择simpleWeather插件。

simpleWeather插件使用moment.js lib获取上次更新的时间。但插件本身并没有提供语言选项。

我的标准位置是“德国基尔”。

但它没有用,并说“无效日期”。 我不知道,为什么!

有人可以帮助我吗?

/* Does your browser support geolocation? */
if ("geolocation" in navigator) {
  $('.js-geolocation').show(); 
} else {
  $('.js-geolocation').hide();
}

/* Where in the world are you? */
$('.js-geolocation').on('click', function() {
  navigator.geolocation.getCurrentPosition(function(position) {
    getWeather(position.coords.latitude+','+position.coords.longitude); //load weather using your lat/lng coordinates
  });
});

$(document).ready(function() {  
  getWeather('Kiel',''); //@params location, woeid //Get the initial weather.
});

function getWeather(location, woeid) {
  $.simpleWeather({
    //20065908 KIEL woeid
    location: location,
    woeid: woeid,
    unit: 'c',
    success: function(weather) {
      html = '<ul>Today: <i class="icon-'+weather.code+'"></i><br />';
      html += '<li>'+weather.temp+'&deg;'+weather.units.temp+'</li>';
      html += '<li>'+weather.city+', '+weather.region+'</li></ul>';

      //Don't forget to include the moment.js plugin.
      var timestamp = moment(weather.updated);
      html += '<p>Weather updated '+moment(timestamp).fromNow()+'</p>';
      html += '<p>Weather updated at '+moment(timestamp).format('MM/DD/YY h:mma')+'</p>';

      for(var i=0;i<weather.forecast.length;i++) {
        html += ''+weather.forecast[i].day+': <i class="icon-'+weather.forecast[i].code+ '"></i>';
      }

      $("#weather").html(html);
    },
    error: function(error) {
      $("#weather").html('<p>'+error+'</p>');
    }
  });
}

codepen

我不知道地理定位究竟是如何工作的...但我认为那个时刻.js使用地理定位来设置一种语言。 所以我试着将moment.js locale globaly设置为'en',但它也没有按照我的预期工作。

1 个答案:

答案 0 :(得分:0)

问题是Yahoo Weather(simpleWeather的数据源)没有遵循自己的日期格式标准......响应中的weather.updated日期如下所示:Tue, 20 Oct 2015 3:58 pm CEST。这不是标准的日期格式,因此Moment.js无法正确解析(因为有些不是唯一的time zone abbreviations,例如CST)。

来自Yahoo Dev documentation的引用:

  

pubDate:此预测发布的日期和时间,在   RFC822第5节定义的日期格式,例如9月25日星期一   17:25:18 -0700。

显然,事实并非如此。 Moment.js很乐意解析RFC822格式的日期。雅虎应该解决这个问题。

但是,如果你真的想使用这个功能并且你有一个固定的位置,有一种方法可以通过改变这一行来解析雅虎的本地日期:

var timestamp = moment(weather.updated);

到此:

var timestamp = moment(weather.updated, "ddd, DD MMM YYYY HH:mm A");

根据访客的时区更正此日期。