【发布时间】:2011-12-04 20:04:09
【问题描述】:
在 Rails 3.0.10 中
ruby-1.9.2-p180 :010 > Time::DAYS_INTO_WEEK
=> {:monday=>0, :tuesday=>1, :wednesday=>2, :thursday=>3, :friday=>4, :saturday=>5, :sunday=>6}
还有
ruby-1.9.2-p180 :011 > Date.today
=> Mon, 10 Oct 2011
ruby-1.9.2-p180 :012 > Date.today.wday
=> 1
因此,星期一在时间映射中为 0,在日期映射中为 1。
https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/time/calculations.rb
我觉得从星期日开始,因为零是更安全、更常见、更容易被其他人理解的做事方式。我希望了解历史/推理,以防我忽略某些东西。
我的用例:我在我的数据库中明确存储星期几。我认为存储为整数比存储“星期一”、“星期二”等更高效、更容易使用。
PS 我有一个好主意,可以执行以下操作。从方法内的工作日字符串来回映射(隐藏整数)。
ruby-1.9.2-p180 :010 > Time::DAYS_INTO_WEEK
=> {:monday=>0, :tuesday=>1, :wednesday=>2, :thursday=>3, :friday=>4, :saturday=>5, :sunday=>6}
Time::DAYS_INTO_WEEK[day_of_week.downcase.to_sym]
Time::DAYS_INTO_WEEK.to_a.select{|k, v| v == start_day }.first.first.to_s.capitalize
【问题讨论】:
-
不知道为什么索引是这样的,但在
irb和rails c中运行Date.today.wday都报告同一工作日(即星期一为 1)。与Time.now.wday的结果相同。此外,您可能会发现这个bit of information 很有用。 -
你是对的。我遇到的“问题”是有一个不一致的可访问映射。我希望为我的映射使用内部哈希。 (并感谢您的链接)
-
在 Rails 中,它们实际上是不变的 - api.rubyonrails.org/classes/Date.html 我期待有一个设置来获取一周的开始。
标签: ruby-on-rails ruby ruby-on-rails-3 time