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

修改Google Apps Script日历函数实现周事件展示及优化

解决Google Apps Script周日历仪表板的两个核心问题

你已经迈出了把月度日历改成周视图的关键一步,现在咱们来搞定剩下的两个问题,让你的周计划仪表板完美运行。

1. 让EEEE格式显示母语(比如荷兰语)

Utilities.formatDate其实支持指定本地化参数,你只需要在格式字符串后面加上对应的语言区域代码就行。比如如果你的母语是荷兰语,就用"EEEE dd/MM", "nl_NL",这样星期几就会显示成荷兰语的Maandag、Dinsdag这类,而不是英文的Monday、Tuesday。

修改后的日期格式化代码示例:

Utilities.formatDate(events2[i].getStartTime(), Session.getScriptTimeZone(), "EEEE dd/MM", "nl_NL")

注意:语言区域代码要对应你需要的母语,比如德语是"de_DE",法语是"fr_FR",根据自己的需求调整。

2. 补全无事件日期,实现完整类日历视图

现在你的函数会跳过没有事件的日期,咱们需要先生成当前周(周一到周日)的所有日期列表,然后把日历事件按日期分组,最后遍历这个日期列表,有事件就展示,没有就显示空状态。

步骤分解:

  • 生成周一到周日的日期数组
  • 将获取到的事件按日期分组(用日期字符串作为键)
  • 遍历日期数组,逐个匹配对应日期的事件,没有就显示空内容

完整的修改后代码

下面是整合了两个解决方案的完整函数,你可以直接替换原来的email函数:

function getWeeklyCalendarEvents() {
  const CalendarID = "你的日历ID"; // 替换成你的日历ID
  const date = new Date();
  const dayOfWeek = date.getDay(); // 0=周日, 1=周一...6=周六
  // 计算本周一的日期(处理周日的特殊情况)
  const monday = new Date(date.getFullYear(), date.getMonth(), date.getDate() - dayOfWeek + (dayOfWeek === 0 ? -6 : 1));
  // 计算本周日的日期
  const sunday = new Date(monday);
  sunday.setDate(monday.getDate() + 6);

  // 获取本周所有事件(加一天确保包含周日全天的事件)
  const events = CalendarApp.getCalendarById(CalendarID).getEvents(monday, new Date(sunday.getTime() + 24 * 60 * 60 * 1000));

  // 生成本周所有日期的数组(周一到周日)
  const weekDates = [];
  for (let i = 0; i < 7; i++) {
    const currentDate = new Date(monday);
    currentDate.setDate(monday.getDate() + i);
    // 生成用于匹配的日期字符串(格式:yyyy-MM-dd)
    const dateKey = Utilities.formatDate(currentDate, Session.getScriptTimeZone(), "yyyy-MM-dd");
    // 存储日期对象和显示用的日期文本(母语格式)
    weekDates.push({
      date: currentDate,
      dateKey: dateKey,
      displayDate: Utilities.formatDate(currentDate, Session.getScriptTimeZone(), "EEEE dd/MM", "nl_NL") // 替换为你的母语区域代码
    });
  }

  // 将事件按日期分组
  const eventsByDate = {};
  events.forEach(event => {
    const eventDateKey = Utilities.formatDate(event.getStartTime(), Session.getScriptTimeZone(), "yyyy-MM-dd");
    if (!eventsByDate[eventDateKey]) {
      eventsByDate[eventDateKey] = [];
    }
    eventsByDate[eventDateKey].push({
      time: Utilities.formatDate(event.getStartTime(), Session.getScriptTimeZone(), "HH:mm"),
      title: event.getTitle()
    });
  });

  // 构建最终的周视图数据
  const weeklyData = [];
  weeklyData.push("<b>本周计划</b>"); // 表头
  weekDates.forEach(day => {
    // 添加日期标题
    weeklyData.push(`<h4>${day.displayDate}</h4>`);
    // 获取当天的事件,没有的话显示提示
    const dayEvents = eventsByDate[day.dateKey] || [];
    if (dayEvents.length > 0) {
      dayEvents.forEach(event => {
        weeklyData.push(`${event.time}<br/>${event.title}`);
      });
    } else {
      weeklyData.push("<i>无事件</i>"); // 空日期的提示文本
    }
    weeklyData.push("<hr/>"); // 日期分隔线,优化视图排版
  });

  return weeklyData;
}

代码说明:

  1. 周日期范围计算:修正了周日的边界处理,确保能获取到周日全天的所有事件
  2. 本地化日期:通过指定区域代码"nl_NL"让星期几显示为母语,你可以根据自己的语言替换这个参数
  3. 补全无事件日期:先生成一周的所有日期,再逐个匹配事件,没有事件的日期会显示<i>无事件</i>,完美实现类日历的完整视图

这样修改后,你的周计划仪表板就能显示完整的周一到周日的每一天,不管有没有事件,而且日期格式也会是你熟悉的母语啦。

内容的提问来源于stack exchange,提问作者Nina Bakker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:13:50