JavaScript时间脚本无法按需自动切换时段问题求助
问题修复:基于PST时区的Unbounce元素时段切换脚本
原脚本的核心问题
- 固定时区偏移错误:硬编码
offset = -7未考虑太平洋夏令时(PDT,偏移-8),导致夏令时期间时段判断完全偏差。 - 日期判断逻辑错误:
CurrentDay !== 0 || CurrentDay !== 6的逻辑永远为真(一个日期不可能同时是周日和周六),导致周末也会执行工作日的判断分支。 - 时区转换方式不可靠:手动计算UTC偏移容易出错,未利用浏览器原生的时区处理能力。
修正后的脚本代码
// 获取洛杉矶时区(自动适配PST/PDT)的当前日期时间信息 const laDateTimeParts = new Intl.DateTimeFormat('en-US', { timeZone: 'America/Los_Angeles', hour12: false, hour: '2-digit', weekday: 'numeric' }).formatToParts(new Date()); // 解析出小时、星期几数值 const currentHour = parseInt(laDateTimeParts.find(part => part.type === 'hour').value, 10); const currentDay = parseInt(laDateTimeParts.find(part => part.type === 'weekday').value, 10); // 定义判断条件 const isWeekday = currentDay >= 1 && currentDay <= 5; // 周一到周五对应1-5 const isBusinessHours = currentHour >= 7 && currentHour < 16; // 7:00-16:00 // 切换元素显示状态 if (isWeekday && isBusinessHours) { // 工作时段显示目标元素 $("#lp-pom-box-409").show(); $("#lp-pom-text-341").show(); $("#lp-pom-text-461").hide(); $("#lp-pom-button-460").hide(); $("#lp-pom-button-209").show(); } else { // 非工作时段/周末切换为其他元素 $("#lp-pom-box-409").hide(); $("#lp-pom-text-341").hide(); $("#lp-pom-text-461").show(); $("#lp-pom-button-460").show(); $("#lp-pom-button-209").hide(); }
关键改进点
- 自动适配夏令时:使用
America/Los_Angeles时区标识符,浏览器会自动切换PST(冬季)和PDT(夏季)的偏移量,无需手动调整。 - 修正逻辑判断:用
currentDay >=1 && currentDay <=5精准判断工作日,彻底解决原脚本的逻辑陷阱。 - 可靠的时间解析:通过
Intl.DateTimeFormat.formatToParts直接获取目标时区的时间参数,避免手动UTC转换的误差。 - 代码可读性提升:将判断条件提取为变量,逻辑更清晰,后续维护更便捷。
额外优化建议
如果需要在时段切换点自动更新元素状态,可以添加定时器每分钟检查一次:
// 每分钟执行一次时间检查与元素切换 setInterval(() => { // 插入上述完整的时间判断与元素切换代码 }, 60000);
内容的提问来源于stack exchange,提问作者winbach
相关产品推荐
相关产品推荐

