嘿嘿=)
我想为我的网站创建一个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+'°'+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>');
}
});
}
我不知道地理定位究竟是如何工作的...但我认为那个时刻.js使用地理定位来设置一种语言。 所以我试着将moment.js locale globaly设置为'en',但它也没有按照我的预期工作。
答案 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");
根据访客的时区更正此日期。