2016-09-21 3 views
0

Я пытаюсь разрешить уничтожение записи только в том случае, если эта запись была создана за последние 30 минут.Дата, возвращающая нечетное значение

Затем я получить значение моей записи (date2) created_at и сверять Time.now (date1):

date1 = 2016-09-21 19:44:52 +0200 
date2 = 2016-09-21 17:23:16 UTC 

тогда я просто вычитаем два:

(date1-date2).minutes.to_i 

Но результат Возвращается в 10s тысяч (что-то вроде 97000) и очень быстро увеличивается, когда я обновляюсь .. (как изменения Time.now) , тогда как мы должны получить только 141 минуту, как указано выше, значения значений

+0

Подсказка: '30.minutes.to_i' возвращает' 1800'. (удалите 'to_i', чтобы найти объяснение) – Stefan

+0

well' to_i' does not do much, когда я его удаляю. Он стирает десятичную часть разницы между двумя датами. Хотя 'minutes' кажется действительным методом Ruby, но не связанным с Time, поэтому я думаю, что мой результат все испорчен. Я нашел 'to_f', который вместо этого возвращает число секунд, которое я могу разделить на 60:' (date1-date2) .to_f/60'. У меня все еще есть несоответствие, но я думаю, это из-за того, что у вас UTC, а другой +0200. попытается исправить это. – Maxence

ответ

2

.minutes - это то, что делает вещь неработоспособной. Удалите его, и он должен работать. Если вы хотите найти промежуток между минутами между ними, вам просто нужно их вычесть, разделите результат на 60 и округлите его.

((date1 - date2)/60).round 

Надеюсь, это помогло, счастливое рубиновое кодирование!

+0

спасибо, что вы правы. Я применил 'to_f' к результату, но redondant. На самом деле у меня тоже было расхождение в часовых поясах. следующие работы: '(date1.utc-date2.utc)/60' – Maxence

1

Необходимо сначала преобразовать местное время (time1) в UTC или UTC (time2) по местному времени.

require 'time' 

time1 = Time.parse('2016-09-21 19:44:52 +0200') 
    #=> 2016-09-21 19:44:52 +0200 
time2 = Time.parse('2016-09-21 17:23:16 UTC') 
    #=> 2016-09-21 17:23:16 UTC 

(time1.utc - time2)/60 
    #=> 21.6 
+0

действительно. это ответ, который я использую. Я оставляю правильный ответ с Грегори, поскольку он очень близок и помечает ваш как полезный. tks – Maxence

+0

Я думал, что 'time1' было лучшим именем для объекта' Time', чем 'date1'. :-) –

+0

хорошо я не использую ни один. в моем коде один - это сырой 'Time.now.utc', а другой - вызов created_at на самой записи. Пытался сделать это простым ^^ – Maxence