Есть ли add_days в ruby ​​datetime? - PullRequest
41 голосов
/ 31 августа 2009

В C # есть метод AddDays ([количество дней]) в классе DateTime.

Есть ли такой метод в ruby?

Ответы [ 5 ]

73 голосов
/ 31 августа 2009

Класс Date предоставляет оператор +, который делает именно это.

>> d = Date.today
=> #<Date: 4910149/2,0,2299161>
>> d.to_s
=> "2009-08-31"
>> (d+3).to_s
=> "2009-09-03"
>> 
24 голосов
/ 19 января 2014

В Rails для этого есть очень полезные методы класса Fixnum (здесь n - Fixnum. Например: 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

Это удобно для Time класса.

PS: требуется Расширения ядра активной поддержки , чтобы использовать их в Ruby

require 'active_support/core_ext'
14 голосов
/ 31 августа 2009

Из Дата класса :

+ (п)

Возвращает новый объект Date, который на n дней позже текущего.

n может быть отрицательным значением, в этом случае новая Дата раньше текущей; однако # - () может быть более интуитивно понятным.

Если n не является числовым, выдается ошибка TypeError. В частности, две даты не могут быть добавлены друг к другу.

8 голосов
/ 17 мая 2016

Я думаю, next_day более читабельно, чем + версия.

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 / дата / RDoc / Date.html # метод-я-NEXT_DAY .

1 голос
/ 16 мая 2016
Date.new(2001,9,01).next_day(30) # 30 - numbers of day 
# => #<Date: 2001-10-01 ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...