1

我正在尝试为 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)
4

3 回答 3

5

如何修复此功能以获取日期之间的平均时间?

由于您的历史是一个排序的日期数组,因此可以轻松计算平均时间跨度:

(_.last(history) - history[0]) / (history.length - 1)

这在数学上等同于构建一个区间数组并对它们进行平均。结果以毫秒为单位。

于 2012-11-13T19:35:17.100 回答
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;
于 2012-11-13T19:34:35.563 回答
0

如何修复此功能以获取日期之间的平均时间?

  1. 从您现有的数据集中,生成一个新数组,它是原始数据中每个日期之间的时间差。
  2. 使用这个新生成的数据集,找到平均值。
  3. 计算相对于 1970 年午夜的时间值。也就是说,如果计算的平均值是 1970 年 1 月 2 日下午 2:03,则差值为 1 天 14 小时 3 分钟。
于 2012-11-13T19:28:53.683 回答