JS判断日期是否在近5天范围内并点击对应按钮,现有代码求纠错
问题修正方案
原有实现的核心问题
- 直接通过
getUTCDate() - 6计算日期的逻辑存在严重边界问题:遇到跨月、跨年场景时会生成无效日期,例如1月1日执行会得到2024/1/-5这类非法值 - 日期比较逻辑为伪代码,无法实际运行
- 存在明显语法错误:
$evalaute拼写错误(正确为$evaluate)、DateWithinRange未声明变量 - 未实现表格日期匹配逻辑:没有获取表格内的日期值做校验,无法定位到符合条件的按钮
可运行的实现代码
// 1. 计算最近5天的时间边界(当前时间往前推5天的时间戳) const FIVE_DAYS_MS = 5 * 24 * 60 * 60 * 1000; const nowTimestamp = Date.now(); const fiveDaysAgoTimestamp = nowTimestamp - FIVE_DAYS_MS; // 2. 遍历所有日期按钮,匹配符合条件的元素 // 注意将'.date-button'替换为你页面实际的日期按钮选择器 const dateButtons = await page.$$('.date-button'); let isMatched = false; for (const button of dateButtons) { // 获取按钮上的日期文本,根据实际页面格式调整取值逻辑 const dateText = await button.evaluate(el => el.textContent.trim()); // 转成时间戳比较,注意如果你的日期格式不是YYYY/MM/DD需要调整转换逻辑 const buttonTimestamp = new Date(dateText).getTime(); // 3. 校验是否在最近5天范围内 if (buttonTimestamp >= fiveDaysAgoTimestamp && buttonTimestamp <= nowTimestamp) { await button.click(); console.log('已点击符合条件的日期:', dateText); isMatched = true; break; } } if (!isMatched) { console.log('最近5天内无匹配日期'); }
注意事项
- 需要将代码里的
.date-button替换为你页面实际的日期按钮CSS选择器 - 如果按钮上的日期文本不是标准的
YYYY/MM/DD格式,需要自行调整new Date(dateText)的转换逻辑,避免时间戳解析错误 - 如果页面日期使用的是当地时区而非UTC时区,将
Date.now()替换为new Date().setHours(0,0,0,0)可以实现按自然日匹配,避免时间部分导致的校验误差
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

