为什么Rails工作日索引与Ruby不同?

时间:2011-10-10 20:54:17

标签: ruby-on-rails ruby ruby-on-rails-3 time

在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

1 个答案:

答案 0 :(得分:8)

我不确定这个问题是否有绝对正确的答案。我认为Zabba对美国/加拿大和国际上几周的日子数之间的区别有所了解。

关于历史推理,看起来David Heinemeier Hansson(DHH)于2005年2月21日作出如下承诺: https://github.com/rails/rails/commit/25f8a25c3ea107dcd0688307ac0ce19c4306f6b4

提交消息清楚地表明,有意将周开始为星期一而不是星期日。考虑到大卫是自以为是,Rails的创造者,当时仍然生活在丹麦,有点理由他忽略了Ruby的日期和时间类考虑周日第0天这一事实。

(稍后提交1c5a6944d38e6818d254f272057b513b038b2270将days_into_week移动到您现在看到的常量DAYS_INTO_WEEK;稍后在提交bc1bcddede0c300e9c88f76a66a152814b734981中将相同的常量添加到Date类中。