Google Apps 脚本:尽管 Google 表格中的格式正确,但脚本中的日历事件时间不正确

问题描述 投票:0回答:1

我目前正在开发一个 Google Apps 脚本,该脚本可以根据 Google 表格文档中的数据自动在 Google 日历中创建事件。脚本成功执行,并且创建了事件,但事件时间不正确,尽管在 Google 表格中输入了正确的时间值。

问题 例如,在数据中,我请求在上午 8:00 创建一个事件,但创建该事件后,它在日历中显示为上午 8:52。活动时间似乎移动了 52 分钟。

这是我迄今为止使用过的脚本:

function createCalendarEvent() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
  var calendarId = '[email protected]'; // Replace with your actual calendar ID
  var calendar = CalendarApp.getCalendarById(calendarId);

  // Check if the calendar was retrieved successfully
  if (!calendar) {
    Logger.log("Calendar not found. Please check the calendar ID.");
    return;
  }

  // Get the data from the specified range
  var dataRange = sheet.getRange("P2:U" + sheet.getLastRow());
  var rows = dataRange.getValues();

  for (var i = 0; i < rows.length; i++) {
    var eventName = rows[i][0]; // Column P: Event Name
    var eventDate = new Date(rows[i][1]); // Column Q: Date
    var startTime = rows[i][2]; // Column R: Start Time
    var endTime = rows[i][3]; // Column S: End Time
    var description = rows[i][4]; // Column T: Description
    var location = rows[i][5]; // Column U: Location (optional)

    if (isNaN(eventDate.getTime())) {
      Logger.log('Invalid date on row ' + (i + 2));
      continue;
    }

    if (startTime && endTime) {
      var startDateTime = new Date(eventDate);
      startDateTime.setHours(Math.floor(startTime * 24), (startTime * 24 * 60) % 60);

      var endDateTime = new Date(eventDate);
      endDateTime.setHours(Math.floor(endTime * 24), (endTime * 24 * 60) % 60);

      // Create the event in Google Calendar
      calendar.createEvent(eventName, startDateTime, endDateTime, {
        description: description,
        location: location
      });

      Logger.log('Event created: ' + eventName + ', Start: ' + startDateTime + ', End: ' + endDateTime);
    } else {
      Logger.log('Invalid time on row ' + (i + 2));
    }
  }
}

我尝试过的:

  1. 检查日历对象:验证是否使用

    getCalendarById()
    正确获取日历。活动已成功创建,因此正在访问日历。

  2. 日期格式:已验证 Google 表格中的日期格式是否正确。

    =ISDATE()
    公式确认日期列有效。

  3. 时间格式:使用

    =ISNUMBER()
    公式检查开始和结束时间。它返回
    TRUE
    ,确认时间有效。

  4. 将时间与日期组合:对于开始时间和结束时间,我使用

    setHours()
    将时间值与事件日期组合起来。尽管如此,该事件的出现时间不正确(通常比预期晚 52 分钟左右)。

问题:

  • 如何确保从工作表中读取并在日历中设置的时间与 Google 表格中的确切时间相匹配?
  • 是否有更好的方法来处理 Google 表格中的时间值,从而避免这种 52 分钟的轮班?

非常感谢任何帮助!

google-apps-script google-calendar-api
1个回答
0
投票

试试这个:

      const startDateTime = new Date(eventDate.getTime() + startTime.getTime());
      const endDateTime = new Date(eventDate.getTime() + endTime.getTime());

另外,注释掉两个

Date.setHours()
调用。

请参阅在 Google 表格中使用日期和时间值在 Apps 脚本中使用日期和时间

© www.soinside.com 2019 - 2024. All rights reserved.