Изменение первого дня недели в рельсах

Я и пытаюсь создать календарь в рубине на рельсах.

В рубинах на рельсах понедельник считается первым днем ​​недели, но я должен установить воскресение в качестве первого. Я намерен изменить это, чтобы правильно использовать встроенные методы даты RoR. Предполагая, что сегодня воскресенье, октябрь 24-го. Посмотрите пример:

Date.now.beginning_of_week

он печатает: 2010-10-18, но если бы я мог установить воскресенье как первую неделю, он должен напечатать: 2010-10-24

Ответ 1

В настоящее время метод принимает параметр начального дня:

beginning_of_week(start_day = :monday)

Ответ 2

Мне удалось сделать запрос на растяжение в рельсы, и теперь вы можете передать аргумент символа методу beginning_of_week. Например, beginning_of_week(:sunday) даст вам воскресенье, предполагая, что недели начнутся в воскресенье. То же самое для метода end_of_week. Но вам нужно подождать, пока выйдет рельсы 3.2, если вы не находитесь на краю кровотечения.

Смотрите это для получения дополнительной информации: https://github.com/rails/rails/pull/3547

Ответ 3

Вы можете работать в api, выполняя следующие действия:

ree-1.8.7-2011.02 :004 > DateTime.now.beginning_of_week
 => Mon, 30 May 2011 00:00:00 -0400 
ree-1.8.7-2011.02 :005 > DateTime.now.beginning_of_week.advance(:days => -1)
 => Sun, 29 May 2011 00:00:00 -0400 

EDIT:

Размышляя об этом последние пару минут, есть веская причина, по которой Rails подходит к этому пути. У вас должно быть начальное значение по умолчанию в течение недели и передача этого необязательного параметра, теперь вы можете сохранить начало недели, скажем, в таблице User в своей базе данных, и позволить пользователю выбрать, в какой день недели начать их неделю, например:

first_day_of_calendar_week = {:default => 0, :monday => 0, :sunday => -1 ..}
....
@user = User.find_by_some_attribute(...)
DateTime.now.beginning_of_week.advance(
  :days => first_day_of_calendar_week[@user.choice] || first_day_of_calendar_week[:default])

Ответ 4

Я не знаю, если это что-то новое, но в настоящее время (Rais 4.2.5 - Ruby 2.2.3) вы можете установить Date.beginning_of_week = :sunday. Я попытался установить это на config/application.rb, но почему-то это не работает должным образом, возможно, это reset для каждого нового запроса. Затем я положил это на before_action в моем ApplicationController и отлично работает.

Ответ 6

если вы не хотите изменять API, вы можете просто добавить шесть дней к дате. Я не знаю, почему вам нужно шесть, но это то, что у вас есть в вашем вопросе.

Time.now.beginning_of_week + 6.days

helper.rb

def format_date(time)
   time.now.beginning_of_week + 6.days
end 

Вид

<%= format_date(Time.now) %>