Google Ads API查询滚动日期范围 如何将endDate设为昨日
问题根因
代码存在两个核心错误,直接触发API校验失败:
- 查询语句中直接写了
'endDate',这是固定字符串字面量,没有引用之前定义的endDate变量,API收到的第二个比较值是纯文本"endDate",完全不符合YYYY-MM-DD的日期格式要求 - 原有逻辑取的是当前日期,没有实现「取昨日为结束日期」的需求,且直接用
toISOString()在非UTC时区下容易出现日期偏移问题
正确实现代码
// 定义固定起始日期 const startDate = '2020-01-01'; // 计算昨日日期,格式化为YYYY-MM-DD const yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); // 用en-CA区域配置直接输出YYYY-MM-DD格式,规避UTC时区偏移问题 const endDate = yesterday.toLocaleDateString('en-CA', { year: 'numeric', month: '2-digit', day: '2-digit' }); // 正确拼接查询条件,通过模板字符串注入实际变量值,不要把变量名写在引号内 const querySegment = `WHERE segments.date BETWEEN '${startDate}' AND '${endDate}'`;
注意事项
- 如果你的Google Ads账号使用UTC时区,也可以用更简短的写法取昨日日期:
const endDate = new Date(Date.now() - 86400000).toISOString().slice(0,10),非UTC时区账号不推荐这种写法,容易出现日期差1天的问题 - 拼接查询语句时,JS变量必须放在引号外部通过字符串拼接/模板字符串注入,变量名放在引号内只会被识别为普通文本,不会读取变量存储的实际值
segments.date的BETWEEN条件要求两个值必须是完全符合YYYY-MM-DD格式的字符串,传入其他格式的文本、数字都会触发校验报错
内容的提问来源于stack exchange,提问作者viovco
相关产品推荐
相关产品推荐

