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?


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.


@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.


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

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

4

Spróbuj tego na Railsach

Time.new + 10.days 

Spróbuj tego na Rubim

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

2

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

DateTime.now.days_since(10)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.