我正在尝试为xml站点地图生成“changefreq”。每次我保存一个页面时,我都会在“save_history”数组中添加一个日期,这个数组给出了一个可以使用的日期列表。最初我以为我只是将所有日期加起来并除以长度,但这只是给我自1970年1月1日以来的平均时间。如何修复此函数以获得日期之间的平均时间?
http://jsfiddle.net/jwerre/pAfdM/19/
或
getChangeFequency = function(history) {
var sum = _.reduce(history, function(memo, num) {
return memo + num.getTime();
}, 0);
var average = sum / history.length;
var hours = average / 3600000;
console.log("totals:", sum, average, hours); // 20292433147523 1352828876501.5334 375785.7990282037
if (hours > 17532) {
return "never";
} else if ((8766 < hours && hours > 17531)) {
return "yearly";
} else if ((730 < hours && hours > 8765)) {
return "monthly";
} else if ((168 < hours && hours > 729)) {
return "weekly";
} else if ((24 < hours && hours > 167)) {
return "daily";
} else if ((1 < hours && hours > 23)) {
return "hourly";
} else {
return "always";
}
};
save_history = [ Tue Nov 13 2012 09:47:39 GMT-0800 (PST), Tue Nov 13 2012 09:47:44 GMT-0800 (PST), Tue Nov 13 2012 09:47:45 GMT-0800 (PST), Tue Nov 13 2012 09:47:46 GMT-0800 (PST), Tue Nov 13 2012 09:47:47 GMT-0800 (PST) ]
getChangeFrequency(save_history)
答案 0 :(得分:4)
如何修复此功能以获取日期之间的平均时间?
由于您的历史记录是一个排序的日期数组,因此可以轻松计算平均时间跨度:
(_.last(history) - history[0]) / (history.length - 1)
这在数学上等同于构建一个区间数组并对它们求平均值。结果以毫秒为单位。
答案 1 :(得分:2)
构建一系列间隔。因此,假设history
从最早到最晚的更改日期排序,它可能看起来像这样
var intervals = [];
for (i = 0; i < history.length - 1; i++) {
intervals[i] = history[i+1].getTime() - history[i].getTime();
}
var sum = _.reduce(intervals, function(memo, num) {
return memo + num;
}, 0);
var average = sum / intervals.length;
var hours = average / 3600000;
答案 2 :(得分:0)
如何修复此功能以获取日期之间的平均时间?