2011-01-11 4 views
87

Próbowałem robić coś podobnegoJak dodać 10 dni do aktualnego czasu w Rails

Time.now + 5.days 

ale to nie działa, choć mgliście pamiętam widząc i będąc pod wrażeniem, ze jest w stanie coś zrobić jak 2.years itd.

Jak to zrobić w Rails 3?

+0

To powinno zadziałać. Jaki błąd dostałeś? – cam

+0

dodał tag dla activesupport – sethvargo

+0

To powinno działać tak. Ponieważ jesteś w szynach, Time.zone.now brzmi bardziej odpowiedni – Ben

Odpowiedz

223

Zastosowanie

Time.now + 10.days 

lub nawet

10.days.from_now 

Zarówno zdecydowanie działać. Czy na pewno jesteś w Railsach, a nie tylko Ruby?

Jeśli na pewno jesteś w Railsach, to gdzie próbujesz to uruchomić? Zauważ, że Active Support musi zostać załadowany.

+1

, który załatwił sprawę. 'irb' nie uruchomi tego –

+0

@yuval to działa na szynach i nie ruby ​​.. Pomyśl, że masz to, ale tylko po to, aby pomóc innym – Catmandu

+1

To jest po prostu fantastyczne. Kocham mnie trochę Ruby i Rails. – wpp

17

days, years, etc., są częścią aktywnego wsparcia, więc to nie będzie działać w irb, ale to powinno działać w rails console.

+0

yeup - spot on. nie można tego zrobić w rubinach waniliowych. –

8

To na pewno działa i używam tego gdziekolwiek muszę dodać dni do bieżącej daty:

Date.today() + 5 
4

kilka innych opcji, tylko dla odniesienia

-10.days.ago 
# Available in Rails 4 
DateTime.now.days_ago(-10) 

Wystarczy wymienić wszystkie opcje znam :

[1] Time.now + 10.days 
[2] 10.days.from_now 
[3] -10.days.ago 
[4] DateTime.now.days_ago(-10) 
[5] Date.today + 10 

Więc jaka jest różnica między nimi, jeśli zależy nam na strefie czasowej:

  • [1, 4] Ze strefy czasowej systemu
  • [2, 3] Z czasowej config twoich Rails aplikacji
  • [5] Data tylko brak czasu zawarte w wyniku
1

Spróbuj on Rails

Time.new + 10.days 

spróbować to na Ruby

require 'date' 
DateTime.now.next_day(10).to_time 
0

Spróbuj tego na Ruby. Zwróci nową datę/czas określoną liczbę dni w przyszłości

DateTime.now.days_since(10)