如何在Apps Script中编写函数获取指定日期区间内所有日期
Apps Script 日期区间数组生成自定义函数
实现代码
/** * 返回两个日期划定区间内的所有日期数组 * @param {Date|string} date1 区间边界日期1 * @param {Date|string} date2 区间边界日期2 * @return {Date[]} 区间内所有日期构成的数组 * @customfunction */ function GET_DATE_RANGE(date1, date2) { // 统一转换输入为Date对象,兼容表格日期、日期字符串、时间戳等输入格式 const d1 = new Date(date1); const d2 = new Date(date2); // 自动识别实际起止日期,兼容两个参数顺序传反的场景 const start = d1 < d2 ? d1 : d2; const end = d1 < d2 ? d2 : d1; const result = []; // 重置时分秒为0,规避时区、时间分量导致的日期偏移问题 let cur = new Date(start.getFullYear(), start.getMonth(), start.getDate()); const stopMark = new Date(end.getFullYear(), end.getMonth(), end.getDate()); while (cur <= stopMark) { result.push(new Date(cur)); cur.setDate(cur.getDate() + 1); } return result; }
使用注意事项
- 部署方式:打开对应Google Sheets文档,点击顶部「扩展程序」-「Apps Script」进入脚本编辑器,粘贴上述代码后保存,完成授权即可在表格内调用。
- 调用方式:直接在单元格输入公式
=GET_DATE_RANGE(日期1, 日期2)即可,需要将返回的日期数组自动填充到连续单元格时,套一层ARRAYFORMULA使用即可,示例:=ARRAYFORMULA(GET_DATE_RANGE(A2,B2))。 - 容错处理:函数自动校正两个日期的先后顺序,无需手动判断哪个是起始/结束日期;自动过滤时分秒分量的干扰,不会出现少算、多算日期的问题。
内容的提问来源于stack exchange,提问作者Nithin Reddy
相关产品推荐
相关产品推荐

