2015-02-19 2 views

ответ

3

According to docs:

d - другая → дата или рациональная

Возвращает разницу между двумя датами, если другой объект даты. Если другое является числовым значением, возвращает объект даты, указывающий на другие дни до себя. Если другой является flonum, предполагается, что его точность не превышает наносекунды.

Таким образом, ваш (2/1) является номером Rational. Вы можете проверить это с помощью @days.class.

Если ваш @date_start также Date объект - вы можете конвертировать @days в Integer, чтобы получить разницу в днях с @days.to_i без потери информации, так как разница между Date с всегда будет (n/1)

Но в целом, метод возвращает Rational, т.к. вы также можете вычесть DateTime объекты (с указанием не только дату, но и время), как это:

DateTime.new(2001,2,3) - DateTime.new(2001,2,2,12) 
# 03 Feb 2001 00:00:00 - 02 Feb 2001 12:00:00 
# => (1/2) 

И в этом случае только половина дня находится между 03 Feb 2001 00:00:00 и 02 Feb 2001 12:00:00, таким образом, она возвращает (1/2).

+0

Блестящий! Это также объясняет фундаментальную логику того, как это происходит. – Jerome

Смежные вопросы