Использование и сравнение относительного времени в Rails - PullRequest
2 голосов
/ 18 октября 2011

Мне нужно знать, как сделать относительное время в рельсах, но не как предложение, больше как что-то, с чем я мог бы сделать это (когда я вводил формат, подобный этому*

if time_ago < 1 hour, 3 weeks, 1 day, etc.
    execute me
end

Ответы [ 2 ]

7 голосов
/ 18 октября 2011

Основное относительное время:

# If "time_ago" is more than 1 hour past the current time
if time_ago < 1.hour.ago
  execute_me
end

Сравнение:

Используйте <, чтобы узнать, старше ли time_ago, чем 1.hour.ago, и >, чтобы узнать, является ли time_ago более поздним, чем 1.hour.ago

Комбинируя время и используя дробные времена:

Вы можете комбинировать времена, как упоминал Давидб, и делать:

(1.day + 3.hours + 2500.seconds).ago

Вы также можете делать дробные секунды, например:0.5.seconds.ago

Нет .milliseconds.ago, поэтому, если вам нужна точность в миллисекундах, просто разбейте ее на доли секунды.То есть 1 миллисекунда назад это:

0.001.seconds.ago

.ago () в целом:

Если поставить .ago в конце практически любого числа, число будет считаться числом секунд.

Вы можете даже использовать дроби в парантезе:

(1/2.0).hour.ago   # half hour ago
(1/4.0).year.ago   # quarter year ago

ПРИМЕЧАНИЕ: чтобы использовать дроби, числитель или знаменатель должен быть числом с плавающей запятой, в противном случае Ruby автоматически применит ответ нацелое число, и отбросьте свою математику.

3 голосов
/ 18 октября 2011

Вы имеете в виду что-н. как это?

if time_ago < Time.now-(1.days+1.hour+1.minute)
    execute me
end
...