基于星期几返回对应训练计划的JavaScript实现方法咨询
Hey there! 刚接触JavaScript就能想到用日期方法和条件判断,已经超棒啦😉 针对你的健身应用需求,我给你整理了几种实用的实现方式,从简单易上手到灵活扩展的都有,慢慢看:
方法1:基础版 -
Date.getDay() + 对象键值映射 首先要纠正一个小细节:getDate()是获取当月的日期(1-31),而我们需要的是星期几,应该用getDay()——它会返回0(周日)到6(周六)的数字。
用对象来存储每天的训练计划是最清爽的方式,比一堆if/else简洁多了,新手也容易理解:
// 先定义好每天的训练计划,键对应getDay()返回的0-6 const workoutPlans = { 0: "周日:主动恢复日,建议轻量拉伸或慢走30分钟", 1: "周一:胸部+三头肌训练,比如平板卧推4组×12次、绳索下压4组×15次", 2: "周二:背部+二头肌训练,比如引体向上4组×力竭、哑铃弯举4组×12次", 3: "周三:核心+有氧训练,比如卷腹4组×20次、慢跑30分钟", 4: "周四:腿部训练,比如杠铃深蹲4组×10次、箭步蹲3组×每腿10次", 5: "周五:肩部训练,比如哑铃推举4组×12次、侧平举4组×15次", 6: "周六:全身综合训练,比如循环完成深蹲、俯卧撑、划船各3组×15次" }; // 获取今日训练计划的函数 function getTodayWorkout() { const today = new Date().getDay(); // 获取0-6的数字 return workoutPlans[today]; } // 给按钮绑定点击事件 document.getElementById('getWorkoutBtn').addEventListener('click', () => { // 这里可以把结果渲染到页面,比如替换某个div的内容,或者用alert提示 alert(getTodayWorkout()); });
如果你还是想用if/else的方式,也可以,就是代码会稍长一点:
function getTodayWorkout() { const today = new Date().getDay(); if (today === 1) { return "周一:胸部+三头肌训练..."; } else if (today === 2) { return "周二:背部+二头肌训练..."; } else if (today === 3) { return "周三:核心+有氧训练..."; } // 剩下的天数依次类推 }
方法2:进阶版 - 自定义星期索引(更贴合日常认知)
如果觉得getDay()返回的0对应周日有点别扭,我们可以自定义一个星期数组,让索引1对应周一,7对应周日,这样更符合日常的计数习惯:
// 自定义星期名称数组,索引和日常星期数对应 const weekDays = ['', '周一', '周二', '周三', '周四', '周五', '周六', '周日']; // 训练计划数组,索引和上面的星期索引对应 const workoutPlans = [ '', // 占位用,让索引从1开始对应周一 "胸部+三头肌训练...", "背部+二头肌训练...", "核心+有氧训练...", "腿部训练...", "肩部训练...", "全身综合训练...", "主动恢复日..." ]; function getTodayWorkout() { const todayNum = new Date().getDay(); // 转换索引:周日(0)→7,其他天数直接用原数字 const customIndex = todayNum === 0 ? 7 : todayNum; return `${weekDays[customIndex]}:${workoutPlans[customIndex]}`; }
方法3:灵活版 - 支持手动选择日期(扩展需求)
如果以后想让用户手动选择某一天查看训练计划,这个方法会更灵活,我们用语义化的英文星期名作为键,还能接受自定义日期参数:
// 语义化的训练计划对象 const workoutPlans = { monday: "胸部+三头肌训练...", tuesday: "背部+二头肌训练...", wednesday: "核心+有氧训练...", thursday: "腿部训练...", friday: "肩部训练...", saturday: "全身综合训练...", sunday: "主动恢复日..." }; // 将日期转换为英文星期名的函数,默认用当前日期 function getDayName(date = new Date()) { const dayIndex = date.getDay(); return ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'][dayIndex]; } // 获取指定日期的训练计划 function getWorkoutPlan(day) { return workoutPlans[day.toLowerCase()] || "暂无该日训练计划"; } // 按钮点击获取今日计划 document.getElementById('getWorkoutBtn').addEventListener('click', () => { const dayName = getDayName(); const formattedDay = dayName.charAt(0).toUpperCase() + dayName.slice(1); alert(`今日(${formattedDay})训练计划:${getWorkoutPlan(dayName)}`); }); // 扩展:如果用户选择了某一天,比如传入"Monday" // console.log(getWorkoutPlan("Monday")); // 会返回对应计划
小总结
- 新手优先选方法1,代码简洁直观,容易理解和维护;
- 要是觉得0对应周日容易搞混,就用方法2,贴合日常的星期计数;
- 如果以后想加更多功能(比如选择日期、切换周计划),方法3的扩展性更强。
内容的提问来源于stack exchange,提问作者Muckle Developer
相关产品推荐
相关产品推荐

