You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 06:40:43