Почему `from_now` неправильно при вызове Fixnum? - PullRequest
3 голосов
/ 06 февраля 2012

Мне нужно сохранить некоторые периоды времени в файле yaml, например:

test:
testing: <%= 1.month %>

Я получаю данные в инициализаторе следующим образом:

Class::TIMES = YAML.load(ERB.new(File.new(Rails.root.join('config', 'times.yml')).read).result)

Пока все хорошо,Но времена, которые я получаю от этого, всегда выходной день;тестирование показывает это.Например:

<Tue, 06 Mar 2012> expected but was <Wed, 07 Mar 2012>.

Тестовая строка:

assert_equal 1.month.from_now.to_date, @object.finished_at.to_date

В другом месте, @ конечный_объект объекта устанавливается следующим образом:

# duration is from the YAML file
self.finished_at = duration.from_now

Кажется, что он всегда выключендень, независимо от того, какой период времени я поместил в файл YAML.Почему это происходит?

РЕДАКТИРОВАТЬ: Это, кажется, проблема с Fixnums и from_now:

> 1.month.from_now
 => Tue, 06 Mar 2012 21:05:00 UTC +00:00 

> 1.month.to_i.from_now
 => Wed, 07 Mar 2012 21:05:05 UTC +00:00

1 Ответ

2 голосов
/ 09 февраля 2012

Когда вы преобразуете 1.month в целое число, оно произвольно устанавливает продолжительность, с которой передается from_now, до 2592000 секунд, т.е. 30 дней, независимо от того, какой это месяц.

Я столкнулся с этим вопросом однажды. Ознакомьтесь с документацией для методов обработки данных и времени .

Хотя эти методы обеспечивают точный расчет при использовании, как в примеры выше (".. 1.month.from_now .."), обратите внимание что это не так, если результат months’, лет и т. д. перед использованием переделано

...