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

如何通过Date.today.wday方法在Ruby日历应用中显示星期名称?

解决Ruby日历应用显示星期的问题

你的问题出在把@todays_date替换成了Date.today.wday——wday返回的是0(周日)到6(周六)的数字,这会破坏原有代码中基于日期对象的计算逻辑,而且你也没把星期文本传递给视图层。

正确的修改方式是保留@todays_date为日期对象,同时在构建每日数据时加入星期文本:

def getWeek
  wdays = ['(Sun)','(Mon)','(Tue)','(Wed)','(Thu)','(Fri)','(Sat)']

  @todays_date = Date.today # 保留原日期对象,不要改成wday
  @week_days = []

  plans = Plan.where(date: @todays_date..@todays_date + 6)

  7.times do |x|
    current_date = @todays_date + x # 提取当前循环的日期,避免重复计算
    today_plans = plans.select { |plan| plan.date == current_date }.map(&:plan) # 简化计划筛选逻辑

    # 在days哈希中新增星期字段,用当前日期的wday匹配对应文本
    days = { 
      :month => current_date.month, 
      :date => current_date.day, 
      :weekday => wdays[current_date.wday],
      :plans => today_plans
    }
    @week_days.push(days)
  end
end

关键说明:

  • 必须保留@todays_date = Date.today,后续计算一周日期范围、每日日期都依赖这个日期对象,换成wday数字会导致所有日期计算失效。
  • 通过current_date.wday获取当前日期对应的星期索引(0-6),以此从wdays数组中取出对应的星期文本(比如周日对应索引0,取(Sun))。
  • 用select+map替代原有的each遍历筛选计划,代码更简洁高效。

之后在视图文件(比如calendars/index.html.erb)中,就可以通过day[:weekday]调用显示星期了,示例代码:

<% @week_days.each do |day| %>
  <div class="day-item">
    <span><%= day[:month] %>/<%= day[:date] %> <%= day[:weekday] %></span>
    <% day[:plans].each do |plan| %>
      <p class="plan-content"><%= plan %></p>
    <% end %>
  </div>
<% end %>

内容的提问来源于stack exchange,提问作者Kan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 20:32:42