Почему Rails Weekday индексы отличаются от Ruby? - PullRequest
9 голосов
/ 11 октября 2011

в 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 Ответ

8 голосов
/ 26 октября 2011

Я не уверен, что есть абсолютно правильный ответ на этот вопрос. Я думаю, что Забба задумался о разнице между тем, как дни недели сочтены в США / Канаде и на международном уровне.

Что касается исторических рассуждений, похоже, что Давид Хейнемайер Ханссон (DHH) сделал следующее обязательство 21 февраля 2005 года: https://github.com/rails/rails/commit/25f8a25c3ea107dcd0688307ac0ce19c4306f6b4

В сообщении коммита четко указывается, что начало недели было преднамеренным, а не понедельником. Учитывая, что Дэвид самоуверенный, создатель Rails, и в то время еще жил в Дании, имеет смысл, что он проигнорирует тот факт, что классы Ruby Date и Time учитывают воскресный день 0.

(позднее коммит 1c5a6944d38e6818d254f272057b513b038b2270 переместил days_into_week в константу, которую вы видите сейчас DAYS_INTO_WEEK; позже эта же константа была добавлена ​​в класс Date в коммите bc1bcddede0c300e9c88f76a66a1528b

100b)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...