天气应用开发:如何用getDay()获取后天及大后天的星期几?
解决天气应用的未来日期星期计算问题
嗨,我来帮你捋捋这个问题~你的思路方向是对的,用getDay()配合星期数组映射完全可行,但代码里有几个关键小问题导致没拿到预期结果,咱们一步步修正:
先说说你代码里的问题
trueDay未初始化且赋值错误:你直接用trueDay + 1但没给trueDay赋值;而且if里写的trueDay === days[0]是比较运算符,不是赋值(应该用=),其实这个if完全没必要,currentDay本身就是getDay()返回的0-6数值,直接对应数组下标就行。- 未处理下标越界:比如今天是周六(
getDay()返回6),加1就变成7了,数组没有下标7的元素,这时候需要用取模%7来实现循环。 - 函数没有返回结果:你没把计算好的星期字符串组合成需要的格式返回。
两种可行的实现方案
方案1:通过下标计算(简单高效)
直接基于今天的星期下标,计算后天、大后天的下标,用取模处理边界情况:
function calculateWeatherDays() { const days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; const today = new Date(); const currentDay = today.getDay(); // 计算后天(今天+2天)的星期下标,取模7处理跨周情况 const dayAfterTomorrowIndex = (currentDay + 2) % 7; const dayAfterTomorrow = days[dayAfterTomorrowIndex]; // 计算大后天(今天+3天)的星期下标 const dayNextIndex = (currentDay + 3) % 7; const dayNext = days[dayNextIndex]; // 替换成实际接口返回的温度数据即可 return `tomorrow: 21º/13º, ${dayAfterTomorrow}: .... , ${dayNext} = ....`; } // 测试调用 console.log(calculateWeatherDays());
方案2:直接操作日期对象(更严谨,支持跨月)
如果遇到月末跨月的情况(比如今天是31号,加2天到下个月2号),直接修改日期对象会更可靠,Date会自动处理月份变化:
function calculateWeatherDays() { const days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; const today = new Date(); // 创建后天的日期实例 const dayAfterTomorrowDate = new Date(today); dayAfterTomorrowDate.setDate(today.getDate() + 2); const dayAfterTomorrow = days[dayAfterTomorrowDate.getDay()]; // 创建大后天的日期实例 const dayNextDate = new Date(today); dayNextDate.setDate(today.getDate() + 3); const dayNext = days[dayNextDate.getDay()]; return `tomorrow: 21º/13º, ${dayAfterTomorrow}: .... , ${dayNext} = ....`; }
这两种方法都能完美解决你的需求,选哪种看你场景——如果只是简单计算星期,方案1足够;如果需要处理复杂日期场景,方案2更稳妥。
内容的提问来源于stack exchange,提问作者Darth Pizza




