To trochę skomplikowane, ale nie tak trudne do oszacowania.
Aby obliczyć koniec tygodnia, użyj ActiveSupport::DateAndTimeCalculations#end_of_week
, ta metoda akceptuje parametr start_day
, który jest używany do wskazania dnia rozpoczęcia tygodnia (domyślnie jest to :monday
). Wprowadzili nawet metodę sunday
.
Sztuczka jest następująca: jeśli chcesz obliczyć najbliższy poniedziałek, możesz obliczyć go jako koniec tygodnia rozpoczynającego się we wtorek (wtorek => pierwszy dzień, środa => drugi dzień, ..., pon. => 7. dzień, który jest również końcem tygodnia).
Więc wszystko co musisz zrobić, to:
# it will return current date if today is Monday and nearest Monday otherwise
Date.today.end_of_week(:tuesday)
zrobić trzeba iść w obu kierunkach? tj. jeśli jest wtorek, przejdź do wczoraj, ale jeśli jest piątek przejdź do następnego poniedziałku? – zsalzbank