2010-10-24 17 views
13

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

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

Date.now.beginning_of_week 

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

ответ

21

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

beginning_of_week(start_day = :monday) 
+0

Не так. Где ты нашел это? – Mike

+3

Право в Rails API docs ... http://api.rubyonrails.org/classes/Date.html#method-i-beginning_of_week – thorncp

+0

Только для рельсов 3 и более ... –

-2

, если вы не хотите, чтобы изменить 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) %> 
+0

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

+0

сделать помощника, тогда проверьте код :) – s84

4

Вы можете работать в 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]) 
+2

Если ваша дата - воскресенье, то 'DateTime.now.beginning_of_week.advance (: days => -1) 'это приведет к неделе и за день до текущей даты. – Trip

18

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

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

+0

Это потрясающе! –

+0

Теперь я пытаюсь нажать настройки для начала недели в config. Посмотрите этот запрос на тягу https://github.com/rails/rails/pull/5339 – gregolsen

+0

Я только что увидел это, поздравляю! –

2

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

+0

Хорошо заметили. Просто для справки, он задокументирован в [Rails Date API] (http://api.rubyonrails.org/v4.2.5/classes/Date.html#method-c-beginning_of_week-3D) – SylvainB

+1

'config.beginning_of_week =: sunday' тоже работает. – Penguin

Смежные вопросы