2010-10-24 11 views
13

I y tratando de crear un calendario en ruby ​​on rails.Cambiando el primer día de la semana en rieles

En ruby-on-rails, lunes se considera que es el primer día de la semana, pero tengo que establecer el domingo como el primero. Tengo la intención de cambiar esto para usar correctamente los métodos integrados de la fecha RoR. Suponiendo que hoy es domingo, 24 de octubre. Mira el ejemplo:

Date.now.beginning_of_week 

imprime: 2010-10-18; pero si pudiera establecer el domingo como el primero de la semana, se debe imprimir: 2010-10-24

Respuesta

21

Hoy en día el método acepta el día de inicio param:

beginning_of_week(start_day = :monday) 
+0

No es así. ¿Dónde has encontrado esto? – Mike

+3

Directamente en los documentos API de Rails ... http://api.rubyonrails.org/classes/Date.html#method-i-beginning_of_week – thorncp

+0

Solo para rieles 3 y mayores ... –

-2

si no desea cambiar la API que pueda solo agrega seis días a la fecha. No estoy seguro de por qué quieres seis, pero eso es lo que tienes en tu pregunta.

Time.now.beginning_of_week + 6.days 

helper.rb

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

vista

<%= format_date(Time.now) %> 
+0

este es un ejemplo de uso. el problema de su solución es que tengo que hacer esto cada vez que quiero que el usuario beginning_of_week y end_of_week –

+0

hagan una ayuda, entonces, verifique el código :) – s84

4

se puede trabajar dentro de la API de la siguiente manera:

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:

Pensando en esto el último par de minutos, hay una buena razón para acercarse a los carriles de esta manera. Debe tener un inicio predeterminado de la semana y pasar este parámetro opcional, ahora puede almacenar el inicio de la semana en, digamos, la tabla de usuarios en su base de datos y permitirle al usuario escoger qué día de la semana comenzar su semana, por ejemplo:

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

Si su fecha es domingo, entonces 'DateTime.now.beginning_of_week.advance (: días => -1) 'esto daría como resultado una semana y un día antes de la fecha actual. – Trip

18

he conseguido hacer una solicitud de extracción en los rieles y ahora se puede pasar argumento símbolo para beginning_of_week método. Por ejemplo, beginning_of_week(:sunday) le dará un domingo asumiendo que las semanas comienzan el domingo. Lo mismo para el método end_of_week. Pero debes esperar hasta que se libere Rails 3.2 en caso de que no estés al borde de la hemorragia.

Ver este para obtener más información: https://github.com/rails/rails/pull/3547

+0

¡Esto es asombroso! –

+0

Ahora estoy tratando de presionar los ajustes para el inicio de la semana en la configuración de los raíles. Ver esta solicitud de extracción https://github.com/rails/rails/pull/5339 – gregolsen

+0

¡Acabo de ver esto, enhorabuena! –

2

No sé si es algo nuevo, pero hoy en día (4.2.5 Rais - Ruby 2.2.3) puede establecer Date.beginning_of_week = :sunday. Intenté configurar esto en config/application.rb, pero de alguna manera no funciona correctamente, probablemente se restablece en cada nueva solicitud. Luego pongo esto en before_action en mi ApplicationController y funciona perfectamente.

+0

Bien notado. Solo como referencia, está documentado en la [API de fechas de Rails] (http://api.rubyonrails.org/v4.2.5/classes/Date.html#method-c-beginning_of_week-3D) – SylvainB

+1

'config.beginning_of_week =: Sunday' is works, too. – Penguin

Cuestiones relacionadas