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

Google Maps API返回旧数据:商家营业时间更新未同步

Google Maps Places API 营业时间不同步问题解决

问题背景

为客户开发的网站小部件,通过Place ID调用Google Maps Places API拉取并展示场所营业时间,客户在Google商家资料中修改了周三、周四的歇业设置后,API仍返回旧数据,当前使用opening_hours.weekday_text字段获取信息。

核心原因

  1. API缓存策略:Places API对场所数据有默认30天的缓存周期,修改商家资料后不会实时同步,需等待缓存过期或触发主动刷新。
  2. weekday_text字段特性:该字段是预生成的静态格式化文本,更新优先级低于结构化的opening_hours.periods,缓存更新更滞后。
  3. 商家资料审核延迟:Google会审核商家资料的修改内容,只有审核通过后,变更才会同步到API数据源。

解决步骤

  • 确认商家资料状态:让客户登录Google商家资料后台,检查修改的营业时间是否已完成审核并标记为「已发布」,避免变更处于待审核状态。
  • 替换为periods字段动态生成营业时间:放弃使用静态的weekday_text,改用结构化的opening_hours.periods来渲染,该字段数据更新更及时,且能准确体现歇业状态。修改代码如下:
// 替换原有的info.innerHTML赋值逻辑
const info = document.getElementById("hours-info");
let hoursHtml = '';
// 映射周几名称:0=周日,1=周一,2=周二,3=周三,4=周四,5=周五,6=周六
const weekdayLabels = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];

place.opening_hours.periods.forEach((period, dayIndex) => {
  const dayName = weekdayLabels[dayIndex];
  let displayText = '';
  // 无close字段表示当日歇业
  if (!period.close) {
    displayText = '歇业';
  } else {
    // 格式化时间(API返回的是HHMM格式,如"0900"转成"09:00")
    const openTime = `${period.open.time.slice(0,2)}:${period.open.time.slice(2)}`;
    const closeTime = `${period.close.time.slice(0,2)}:${period.close.time.slice(2)}`;
    displayText = `${openTime}-${closeTime}`;
  }
  hoursHtml += `${dayName}: ${displayText}<br>`;
});
info.innerHTML = hoursHtml;
  • 触发缓存刷新:可以通过间隔1-2小时重复调用getDetails接口,或让客户在商家资料中做一次微小的编辑(比如微调营业时间再改回),强制触发数据同步。
  • 验证API数据源:直接在Google官方的Place ID查询页面手动验证该Place ID的最新营业时间,确认数据是否已经同步到API端。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 15:43:13