如何通过Apps Script获取谷歌日历用户的工作周设置?
通过Google Apps Script获取用户日历工作时间设置
要获取Google Calendar中用户自定义的工作周和工作日设置,你需要用到高级日历服务(Advanced Calendar Service)——基础的CalendarApp服务无法直接访问这些配置。以下是具体实现步骤:
1. 启用高级日历服务
在Apps Script编辑器中:
- 点击顶部菜单栏的「扩展」>「Apps Script」(独立脚本编辑器可直接操作)
- 选择「服务」>「添加服务」,找到「Calendar API」并启用它
2. 获取并解析工作时间设置
调用Calendar.Settings.get('workingHours')可直接拿到用户的工作时间配置,返回的JSON结构包含每周每一天的工作状态、起止时间。示例代码如下:
function getUserWorkingHours() { // 获取当前用户的工作时间配置 const workingHours = Calendar.Settings.get('workingHours'); if (!workingHours) { console.log('该用户未设置自定义工作时间'); return null; } // 提取工作周的详细配置 const workWeekConfig = workingHours.workingWeek; // 打印配置信息(可根据需求调整处理逻辑) workWeekConfig.forEach(day => { const dayName = ['周日','周一','周二','周三','周四','周五','周六'][day.dayOfWeek]; console.log(`${dayName}:`); console.log(` 是否为工作日: ${day.isWorkDay ? '是' : '否'}`); if (day.isWorkDay) { console.log(` 工作开始时间: ${day.startTime}`); console.log(` 工作结束时间: ${day.endTime}`); } }); return workWeekConfig; }
返回的workWeek数组中每个对象的字段说明:
dayOfWeek: 数字,0代表周日,1代表周一,以此类推到6代表周六isWorkDay: 布尔值,标记当天是否被设置为工作日startTime/endTime: 字符串格式的时间(如"07:00"、"15:00"),代表当天的工作起止时间
3. 验证时间是否在工作时段内
基于上面的配置,可以写一个辅助函数,判断指定时间是否在用户的工作时间范围内:
function isTimeInWorkingHours(targetDate) { const workWeek = getUserWorkingHours(); if (!workWeek) return false; // 获取目标日期对应的星期几(0=周日,1=周一) const targetDayOfWeek = targetDate.getDay(); const dayConfig = workWeek.find(day => day.dayOfWeek === targetDayOfWeek); // 非工作日直接返回false if (!dayConfig || !dayConfig.isWorkDay) { return false; } // 将时间转换为分钟数,方便比较 const [startH, startM] = dayConfig.startTime.split(':').map(Number); const startTotalMin = startH * 60 + startM; const [endH, endM] = dayConfig.endTime.split(':').map(Number); const endTotalMin = endH * 60 + endM; const targetTotalMin = targetDate.getHours() * 60 + targetDate.getMinutes(); // 判断目标时间是否在工作时段内 return targetTotalMin >= startTotalMin && targetTotalMin <= endTotalMin; }
注意事项
- 权限要求: 脚本需要申请日历设置的只读权限,部署时确保OAuth范围包含
https://www.googleapis.com/auth/calendar.settings.readonly - 时区处理: 返回的工作时间基于用户日历的默认时区,处理目标时间时建议用
CalendarApp.getDefaultCalendar().getTimeZone()获取时区,确保时间比较的准确性 - 默认设置: 如果用户未设置自定义工作时间,
workingHours会返回null,此时可按公司默认的工作时间(如周一至周五9:00-17:00)处理
内容的提问来源于stack exchange,提问作者Trashman
相关产品推荐
相关产品推荐

