Jak dodać 10 dni do aktualnego czasu w Railsach

106

Próbowałem zrobić coś takiego

Time.now + 5.days

ale to nie działa, mimo że mgliście pamiętam, że widziałem i byłem pod wielkim wrażeniem, że mogłem zrobić coś takiego 2.yearsitp.

Jak to zrobić w Railsach 3?

Yuval Karmi
źródło
To powinno działać. Jaki błąd otrzymujesz?
kamera
Powinno działać tak. Kiedy jesteś na torach, Time.zone.now brzmi bardziej adekwatnie
Ben

Odpowiedzi:

284

Posługiwać się

Time.now + 10.days

lub nawet

10.days.from_now

Obie zdecydowanie działają. Czy na pewno jesteś w Railsach, a nie tylko w Rubim?

Jeśli na pewno jesteś w Railsach, skąd próbujesz to uruchomić? Pamiętaj, że należy załadować Active Support.

gunn
źródło
@yuval działa na szynach, a nie na rubinach. Myślisz, że masz, ale tylko po to, aby pomóc innym
Catmandu
1
To jest po prostu fantastyczne. Uwielbiam trochę Ruby i Rails.
wpp
5
Jest subtelna różnica. Time.now + 10.dayszawsze wybiera strefę czasową systemu, podczas gdy 10.days.from_nowwybierze strefę czasową UTC, jeśli nic nie jest ustawione w konfiguracji rails.
Babistalikesflyingonrails
Generalnie najlepiej jest używać Time.zone.nowzamiast Time.now.
x-yuri
21

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

Jonathan Julian
źródło
yeup - na miejscu. nie mogę tego zrobić w waniliowym rubinie.
Yuval Karmi
1
Działa również w irb. Jeśli masz zainstalowany klejnot, po prostu zrób go require 'active_support/time'na początku sesji lub przed użyciem jego poleceń
darkdefender 27
10

To zdecydowanie działa i używam tego wszędzie tam, gdzie potrzebuję dodać dni do bieżącej daty:

Date.today() + 5
dj kaori
źródło
10

Kilka innych opcji, tylko w celach informacyjnych

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

Po prostu wymień wszystkie opcje, które 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

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

  • [1, 4] Ze strefą czasową systemu
  • [2, 3] Z konfiguracją strefy czasowej Twojej aplikacji Rails
  • [5] Tylko data nie zawiera czasu w wyniku
Hieu Pham
źródło
4

Spróbuj tego na Railsach

Time.new + 10.days 

Spróbuj tego na Rubim

require 'date'
DateTime.now.next_day(10).to_time
Rahul Patel
źródło
2

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

DateTime.now.days_since(10)
Ramyani
źródło