新手问题 学习 Redmine 里的 calendar 的时候,发现有个算法搞不懂了,特此来请教大神

miserytan · 2016年10月10日 · 最后由 tesla_lee 回复于 2016年10月10日 · 1465 次阅读

代码如下,我个人感觉应该是算的一周的第一天和一周的最后一天所在的位置

def first_wday
  case Setting.start_of_week.to_i
  when 1
    @first_dow ||= (1 - 1)%7 + 1
  when 6
    @first_dow ||= (6 - 1)%7 + 1
  when 7
    @first_dow ||= (7 - 1)%7 + 1
  else
    @first_dow ||= (l(:general_first_day_of_week).to_i - 1)%7 + 1
  end
end

def last_wday
  @last_dow ||= (first_wday + 5)%7 + 1
end

但是我运行之后看到它的日历页面 最开始都是星期日,最后一天都是星期六 还望大神帮忙看下代码部分到底说的是什么

  1. 代码格式有点问题,多复制了一个 end 你理解的是对的 first_wday 返回的是一周的第一天是哪一天 last_wday 返回的是一周的最后一天是哪一天

  2. 为什么开始都是星期日? 因为这段代码 Setting.start_of_week.to_i 返回的是 7, 也就是默认设置的就是星期日是第一天, 如果你希望是星期一是第一天,那么 Settings.start_of_week 应该改成 1

补充一下,为什么要用上面的算法,是为了过滤你在 Settings.start_of_week中设置 1-7 以外的数字。你也可以用别的算法。

3楼 已删除
4楼 已删除

@tesla_lee 我明白了 谢谢

miserytan 关闭了讨论 10月10日 13:15

#4 楼 @miserytan @first_dow@last_dow 是为了存放你的结果,避免重复计算。 when 1 怎么不理解? 这个算法其实你可以自己去实现的。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册