javascript输出时间间隔

时间:2019-02-19 19:18:34

标签: javascript intervals appscript

我正在努力将Google工作表自动转换为Google日历,但是我被卡住了。

我有一个对应于小时的字符串数组

ex: time = [8, 9, 10, 2, 3, 4]

并想输出一个字符串

ex: range = "8-11, 2-5"

我需要用google app脚本编写这个,有什么建议吗?

我是google app脚本的新手,很难编写该函数。我最初的过程是将字符串数组转换为军事时间整数,并创建两个for循环,但是我敢肯定有一种更有效的方法。

感谢您的帮助!

这是我当前的代码:

var time = [8, 9, 10, 2, 3, 4]

// if (currentTime == 13) {currentTime -= 12;}
function timeRange(cellInput, hourList) {
  var start = parseInt(hourList[0]);
  for (var i = 1; i < hourList.length; ++i) {
    if (hourList[i] == start + i) {
      var end = parseInt(hourList[i]);
    } else {
      cellInput.setValue(start + " - " + (end + 1));
    }
  }
}

function soloTime(cellInput, hour) {
  //convert hour string to hour
  var hour = parseInt(hour)
  var start = hour
  var end = hour + 1
  cellInput.setValue(start + "-" + end);
}

3 个答案:

答案 0 :(得分:0)

您可以检查前身并收集范围。

var time = [8, 9, 10, 2, 3, 4, 11, 12, 1],
    range = time
        .reduce((r, t, i, a) => {
            if (a[i - 1] % 12 + 1 === t) {
                r[r.length - 1][1] = t;
            } else {
                r.push([t]);
            }
            return r;
        }, [])
        .map(a => a.join('-'))
        .join(', ');

console.log(range);

答案 1 :(得分:0)

这是您要寻找的吗?

const timeToRange = (arr) => {
  const mins = arr
    .filter((x, i, arr) => x !== arr[i - 1] + 1);
  const maxs = arr
    .filter((x, i, arr) => x !== arr[i + 1] - 1)
    .map(x => x + 1);

  return mins
    .map((x, i) => [x, maxs[i]].join('-'))
    .join(', ');
};

console.log(
  timeToRange([8, 9, 10, 2, 3, 4])
);

答案 2 :(得分:0)

您可以保留每个范围的开头,然后迭代直到当前值不适合前一个值,然后使用前一个和开始值创建一个范围,将它们收集在数组中,就是这样。

Template.MyTag.helpers({
  getTemplate() {
    const instance = Template.instance()
    console.log(instance.data)
    return `mytag${instance.data.tag}`
  },
  getData () {
    return Template.instance().data
  }
})