#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, потому что он более тщательный, чтобы помочь другим людям