You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于星期几返回对应训练计划的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 09:57:53