2009-08-31 33 views

Odpowiedz

59

Klasa Date zapewnia operatorowi +, który właśnie to robi.

>> d = Date.today 
=> #<Date: 4910149/2,0,2299161> 
>> d.to_s 
=> "2009-08-31" 
>> (d+3).to_s 
=> "2009-09-03" 
>> 
13

Z Date class:

+ (n)

Zwraca nowy obiekt Date, który jest n dni później niż obecnie.

n może być wartością ujemną, w którym to przypadku nowa data jest wcześniejsza niż aktualna; jednak # -() może być bardziej intuicyjny.

Jeśli n nie jest wartością numeryczną, zostanie wygenerowany TypeError. W szczególności dwóch dat nie można dodawać do siebie.

19

W szyn są bardzo użyteczne sposoby Fixnum klasy dla tego (tutaj n jest Fixnum np. 1,2,3....)

Date.today + n.seconds # you can use 1.second 
Date.today + n.minutes # you can use 1.minute 
Date.today + n.hours # you can use 1.hour 
Date.today + n.days # you can use 1.day 
Date.today + n.weeks # you can use 1.week 
Date.today + n.months # you can use 1.month 
Date.today + n.years # you can use 1.year 

Są one wygodne Time klasy też.

PS: wymagają Całość Extensions Pomoc Rdzeń aby z nich korzystać w Ruby

require 'active_support/core_ext' 
+4

Te metody są specyficzne dla Railsów – Max

1
Date.new(2001,9,01).next_day(30) # 30 - numbers of day 
# => #<Date: 2001-10-01 ... 
+0

Dodaj wyjaśnienie w odpowiedzi na pytanie, w jaki sposób ta odpowiedź pomaga OP w naprawianiu bieżącego problemu –

5

myślę next_day jest bardziej czytelny niż + wersji.

require 'date' 

DateTime.new(2016,5,17) 
# => #<DateTime: 2016-05-17T00:00:00+00:00 ((2457526j,0s,0n),+0s,2299161j)> 
DateTime.new(2016,5,17).next_day(10) 
# => #<DateTime: 2016-05-27T00:00:00+00:00 ((2457536j,0s,0n),+0s,2299161j)> 
Date.new(2016,5,17) 
# => #<Date: 2016-05-17 ((2457526j,0s,0n),+0s,2299161j)> 
Date.new(2016,5,17).next_day(10) 
# => #<Date: 2016-05-27 ((2457536j,0s,0n),+0s,2299161j)> 

http://ruby-doc.org/stdlib-2.3.1/libdoc/date/rdoc/Date.html#method-i-next_day.

Powiązane problemy