2012-09-09 3 views
2

나는 그런 코드를 시도 계산하지만 작동하지 않습니다레일은 시간이 차이

require 'time_diff' 

cur_time = Time.now.strftime('%Y-%m-%d %H:%M') 
time_diff_components = Time.diff(@art.datetime_of_update, Time.parse(cur_time)) 
if @art.PRICEM.to_f >= eprice.to_f || @art.PRICEM.blank? && time_diff_components[:hour] < 3 && 

을하지만 DB 시간에, 0 timediff 인은 다음과 같습니다

2012년 8월 28일 19:53:12

지금부터 db까지의 시간을 어떻게 계산합니까?

+0

단지 시간을 원하는 경우 'time_diff'는 사용하려는 라이브러리가 아닙니다. 단지 두 시간을 서로 빼고'1.hour'로 나눕니다. – Gareth

+0

두 시간의 차이가 "1 일 2 시간"이면 'time_diff_components [: hour]'는 2가됩니다 (26이 아님) . 그건 네가 원하는 것과 같지 않은가? – Gareth

+0

그래,하지만 Jon Skeet의 해결 방법을 보자. – brabertaser19

답변

4

첫째로, 당신은이 두 줄에 표시되어야합니다

cur_time = Time.now.strftime('%Y-%m-%d %H:%M') 
time_diff_components = Time.diff(@art.datetime_of_update, Time.parse(cur_time)) 

왜 것이다 당신 형식 시간과 만 구문 분석 작업의 입력으로 값을 사용할 수 있습니까? 덜 깨지기 쉬운 - - 확실히 그것은 간단하게 될 것이다 작성 :

time_diff_components = Time.diff(@art.datetime_of_update, Time.now) 

내가 왜 (내가 루비 dev에 아니에요) 당신을 위해 작동하지 않는 Time.diff 모르겠지만, 목표 인 경우 확인을 "3 시간 미만 전에"업데이트 된 문서는 다음 간단한 방법이 있는지 여부 : 현재 시간에서 세 시간 빼기, 그 한계와 기사의 업데이트 시간을 비교 : 당신이

limit_time = Time.now + 3.hours 
if @art.PRICEM.to_f >= eprice.to_f || @art.PRICEM.blank? && @art.datetime_of_update >= limit_time 
+0

OP가 레일즈를 사용하고 있기 때문에'limit_time = Time.now + 3.hours' 일 수도있다. 어쨌든'ActiveSupport '. –

+0

@ 마이클 : 감사합니다, 편집했습니다. 이것이 루비 질문에 답하는 것이 위험한 이유입니다. 나는 내 대답의 나머지 부분이 합리적이라고 생각하니? –

+0

괜찮습니까? – brabertaser19

3

이없는 경우 정확히 말하면 레일스 time_ago_in_words 도우미를 사용할 수 있습니다.

time_ago_in_words(Time.now - 3.hours) 
#=> about 3 hours 

물론 시간 차이에 따라 '분', '일'등을 반환 할 수도 있습니다.

+0

이것은 좋은 일이지만 나에게 적합하지 않다. – brabertaser19

+0

OK, 열심히하지 마세요 :) –