如何让'周'从特定的一天而不是星期一开始?

时间:2010-04-22 14:03:08

标签: ruby-on-rails ruby

在正在建设的应用程序中,我正试图让星期六的星期开始。在轨道上的红宝石中,默认情况下,星期一是星期一开始的。

所以如果你有任何技巧或补丁让它适合我!

提前致谢!

3 个答案:

答案 0 :(得分:10)

我已经设法向rails发出了一个pull请求,现在你可以将symbol参数传递给beginning_of_week方法。例如,beginning_of_week(:sunday)会给你一个星期日,假设星期日开始。 end_of_week方法也是如此。但是你必须等到轨道3.2释放,以防你不在最前沿。

有关详情,请参阅此处: https://github.com/rails/rails/pull/3547

更新: 现在我正在等待新的PR被接受,它可以在你的rails app配置中设置默认的星期开始。有关详细信息,请参阅此https://github.com/rails/rails/pull/5339

更新:

合并!

rafaelfranca merged commit 5428de1 into rails:master from gregolsen:week_start_config 4 months ago


rafaelfranca closed the pull request 4 months ag 0

答案 1 :(得分:4)

你可以把它扔进初始化器,让beginning_of_week返回星期日:

module ActiveSupport #:nodoc:
  module CoreExtensions #:nodoc:
    module Time #:nodoc:
      module Calculations
        def beginning_of_week
          (self - self.wday.days).midnight
        end
      end
    end
  end
end

但是,您可以更安全地定义自己的方法并保持库存完整:

module ActiveSupport #:nodoc:
  module CoreExtensions #:nodoc:
    module Time #:nodoc:
      module Calculations
        def traditional_beginning_of_week
          (self - self.wday.days).midnight
        end
      end
    end
  end
end

答案 2 :(得分:2)

您可以尝试用自己的方法替换Date#wdayTime#wday方法。我认为Rails的支持方法如beginning_of_week等依赖于wday,并且可以开箱即用。

这是一些代码,但它绝对只是一个想法,既没有测试也没有推荐的事情:

require 'activesupport'
#=> true
Time.now.wday
#=> 4
Time.now.beginning_of_week
#=> 2010-04-19 00:00:00 0200

class Time
  alias_method :orig_wday, :wday
  def wday 
    (self.orig_wday + 2) % 7
  end
end

Time.now.wday
#=> 6
Time.now.beginning_of_week
#=> 2010-04-17 00:00:00 0200