如何通过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
相关产品推荐
相关产品推荐

