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

如何验证Google Calendar选定时间是否符合房间工作时段要求

校验Google Calendar预订时段合规性的完整方案

这问题拆解开其实就是几个关键校验点,一步步捋清楚就很容易实现:

核心规则先明确:只有当预订的整个时段完全落在「工作日(周一至周五)的08:00-21:00」范围内时,才需要渲染RESERVED区块。下面是具体的校验逻辑:

1. 先提取并统一时间格式

从Google Calendar的预订数据里,你需要拿到两个核心时间对象:

  • 预订开始时间(startDateTime)
  • 预订结束时间(endDateTime)

重点提醒:必须确保这两个时间是房间所在地时区的时间!GC默认可能返回UTC时间,一定要先转换为目标时区(比如房间在上海就转成Asia/Shanghai),否则时差会导致校验完全错误。

2. 第一步:校验是否为工作日

判断预订开始时间的日期是否属于常规工作日(周一至周五,特殊地区可调整规则):

  • JavaScript示例:
const isWeekday = (date) => {
  // getDay()返回0=周日,1-5=周一到周五
  const day = date.getDay();
  return day >= 1 && day <= 5;
};
  • Python示例:
def is_weekday(date):
    # weekday()返回0=周一,4=周五
    return 0 <= date.weekday() <= 4

3. 第二步:校验时段是否完全落在08:00-21:00内

需要同时满足三个子条件:

  • 开始时间≥08:00(比如08:00、08:15都合格,07:59不行)
  • 结束时间≤21:00(比如21:00、20:45都合格,21:01不行)
  • 开始和结束时间属于同一天(避免跨天预订,比如20:00-22:00、次日07:00-09:00都不符合规则)

JavaScript示例:

const isWithinTimeRange = (start, end) => {
  // 先判断是否为同一天
  if (start.toDateString() !== end.toDateString()) return false;
  
  const startHour = start.getHours();
  const startMin = start.getMinutes();
  const endHour = end.getHours();
  const endMin = end.getMinutes();
  
  // 校验开始时间不早于08:00
  const startsAfterOpening = (startHour > 8) || (startHour === 8 && startMin >= 0);
  // 校验结束时间不晚于21:00
  const endsBeforeClosing = (endHour < 21) || (endHour === 21 && endMin <= 0);
  
  return startsAfterOpening && endsBeforeClosing;
};

4. 组合所有校验条件

只有当工作日校验和时间范围校验同时通过时,才判定为合规:

JavaScript完整示例:

const isBookingValid = (gcStart, gcEnd) => {
  const targetTimezone = 'Asia/Shanghai'; // 替换为房间所在时区
  // 转换为目标时区的日期对象
  const start = new Date(gcStart.toLocaleString('en-US', { timeZone: targetTimezone }));
  const end = new Date(gcEnd.toLocaleString('en-US', { timeZone: targetTimezone }));
  
  return isWeekday(start) && isWithinTimeRange(start, end);
};

// 使用场景
if (isBookingValid(userSelectedStart, userSelectedEnd)) {
  // 渲染RESERVED区块
}

额外注意事项

  • 时区问题是重中之重!如果忽略时区转换,跨时区用户的预订会出现大量误判;
  • 对于GC的「全天事件」,直接判定为不合规即可,因为全天事件的结束时间默认是次日00:00,超出21:00的范围;
  • 一定要测试边界值:比如刚好08:00开始、21:00结束的预订要放行,07:59开始或21:01结束的要拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:50:35