Использование и сравнение относительного времени в Rails

#ruby-on-rails #function #date #relative-date

#ruby-on-rails #функция #Дата #относительная дата

Вопрос:

Мне нужно знать, как сделать относительное время в rails, но не как предложение, больше похоже на то, с чем я мог бы это сделать (когда я ввожу формат, подобный этому 2008-08-05 23:48:04 -0400)

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

Ответ №1:

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

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

Сравнение:

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

Объединение времени и использование дробного времени:

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

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

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

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

 0.001.seconds.ago
  

.ago() в общем:

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

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

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

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

Ответ №2:

Вы имеете в виду sth. нравится это?

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

Комментарии:

1. Вы также можете записать это как (1.days 1.hour 1.minute).ago

2. @davidb ваш сработал, я переключусь на ответ normalocity, потому что он более тщательный, чтобы помочь другим людям